teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

別の手法

2019/10/17 15:47

投稿

hermit19901127
hermit19901127

スコア368

answer CHANGED
@@ -62,4 +62,20 @@
62
62
  一度購読した命令の「破棄」に関して、こちらが参考になるかもしれません…
63
63
  https://qiita.com/yaegaki/items/bea845df0b011d515afb
64
64
 
65
- UniRxの機能で一度命令した購読は、こちらの意図するタイミングで「破棄処理」も同時に入れると、意図せぬ場所での購読処理を防止できるかと。
65
+ UniRxの機能で一度命令した購読は、こちらの意図するタイミングで「破棄処理」も同時に入れると、意図せぬ場所での購読処理を防止できるかと。
66
+
67
+ ------------------------------------------------------------
68
+
69
+ これはまた、違った別の解法というより、別アプローチになりますが
70
+
71
+ 1.別Scene(例:Stage001.Scene,Stage002,Scene)に分ける(わかりやすい)
72
+
73
+ 2.Stage事に別クラスを作る
74
+  例:public class Stage001 { /** Stage1に必要な処理や変数宣言* / }
75
+ public class Stage002 { /** Stage2に必要な処理*や変数宣言 / }
76
+  ※)こちらはある程度プログラムの知識が必要
77
+    ここはプログラムの知識をそこまで求めなければ気にしなくていいですが
78
+    ステージ事の共通部分をStageBaseのような名前でベースクラスを作り
79
+    各々のステージのクラスにStageBaseを継承して、それを運用するほうが色々と捗ると思います
80
+
81
+ ステージのステート管理から見直すのも、一つの手ではあります。

3

破棄に関する説明追加

2019/10/17 15:46

投稿

hermit19901127
hermit19901127

スコア368

answer CHANGED
@@ -56,4 +56,10 @@
56
56
 
57
57
  は、「Stage1」を開始した時点で、秒読みを開始し、
58
58
  あなたがIsPlayingでゲームの終了をいくら指示しようが、
59
- 彼らは『Stage1」を開始した時点』での秒読みを、愚直かつ素直に続けます。
59
+ 彼らは『Stage1」を開始した時点』での秒読みを、愚直かつ素直に続けます。
60
+
61
+ ------------------------------------------------------------
62
+ 一度購読した命令の「破棄」に関して、こちらが参考になるかもしれません…
63
+ https://qiita.com/yaegaki/items/bea845df0b011d515afb
64
+
65
+ UniRxの機能で一度命令した購読は、こちらの意図するタイミングで「破棄処理」も同時に入れると、意図せぬ場所での購読処理を防止できるかと。

2

補足

2019/10/17 15:41

投稿

hermit19901127
hermit19901127

スコア368

answer CHANGED
@@ -37,4 +37,23 @@
37
37
 
38
38
 
39
39
  あと、蛇足ですが、これ、1面で30秒経過してヒントみたいな処理画はした後、
40
- 1面で苦戦なりして60秒経過すると、2回目の30秒経過でまた同じヒント流れると思います。
40
+ 1面で苦戦なりして60秒経過すると、2回目の30秒経過でまた同じヒント流れると思います。
41
+
42
+ ---------------------------------
43
+ すみません、また編集…というより
44
+
45
+ >クリアしたかどうかは他のプログラムが把握しており、IsPlayingフラグを使って、ゲーム中かそうでないかを判断させています。
46
+
47
+ このフラグは残念ながら彼らには意味を成していません。
48
+
49
+ IsPlayingであなたがゲームの終了をいくら指示しても、『「Stage1」を開始した時点』で秒読みを指示した彼ら
50
+ ```C#
51
+ Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());
52
+ Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2());
53
+ Observable.Timer(TimeSpan.FromSeconds(90)).Subscribe(_ => Event3());
54
+ Observable.Timer(TimeSpan.FromSeconds(120)).Subscribe(_ => Event4());
55
+ ```
56
+
57
+ は、「Stage1」を開始した時点で、秒読みを開始し、
58
+ あなたがIsPlayingでゲームの終了をいくら指示しようが、
59
+ 彼らは『Stage1」を開始した時点』での秒読みを、愚直かつ素直に続けます。

1

解釈に間違いがあったため修正

2019/10/17 15:34

投稿

hermit19901127
hermit19901127

スコア368

answer CHANGED
@@ -21,22 +21,20 @@
21
21
 
22
22
  解決策…は実装方法にも寄りますが
23
23
 
24
- 1.まず1面を始めた時点で
25
-   Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());
24
+ 文書を読む限り、1面は30秒経過、2面は60秒でヒントのようなものがでると予想されます。
26
-   上記のみを購読させる
27
25
 
28
- 2.1面をクリアした
26
+ 1面が発生したときに
29
-   Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());
27
+ Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1()); だけを登録
30
-   上記購読の解除
28
+ 1面クリア時に
29
+ Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());の登録を解除
31
30
 
32
- 3.2面の開始で
31
+ 2面が発生したときに
33
- Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2());
32
+ Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2()); だけを登録
34
-  上記登録
33
+ 2面クリア時に
34
+ Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2());の登録を解除
35
35
 
36
- …以下は似たような処理なので省略します
36
+ ような処理を入れるとよいと思います
37
37
 
38
38
 
39
- 上記を検討するのがよい思われますが、
39
+ 、蛇足ですが、これ、1面で30秒経過してヒントみたいな処理画はした後、
40
- UniRxに用意された機能、そちらの想定する実装を叶えられる最適な方法があるような気もします。
40
+ 1面苦戦なりして60秒経過すると、2回目の30秒経過でまた同じヒント流れると思います。
41
-
42
- ひとまず、ソースを見た限りの、発生してるであろう事象について…