回答編集履歴

4

別の手法

2019/10/17 15:47

投稿

hermit19901127
hermit19901127

スコア368

test CHANGED
@@ -127,3 +127,35 @@
127
127
 
128
128
 
129
129
  UniRxの機能で一度命令した購読は、こちらの意図するタイミングで「破棄処理」も同時に入れると、意図せぬ場所での購読処理を防止できるかと。
130
+
131
+
132
+
133
+ ------------------------------------------------------------
134
+
135
+
136
+
137
+ これはまた、違った別の解法というより、別アプローチになりますが
138
+
139
+
140
+
141
+ 1.別Scene(例:Stage001.Scene,Stage002,Scene)に分ける(わかりやすい)
142
+
143
+
144
+
145
+ 2.Stage事に別クラスを作る
146
+
147
+  例:public class Stage001 { /** Stage1に必要な処理や変数宣言* / }
148
+
149
+ public class Stage002 { /** Stage2に必要な処理*や変数宣言 / }
150
+
151
+  ※)こちらはある程度プログラムの知識が必要
152
+
153
+    ここはプログラムの知識をそこまで求めなければ気にしなくていいですが
154
+
155
+    ステージ事の共通部分をStageBaseのような名前でベースクラスを作り
156
+
157
+    各々のステージのクラスにStageBaseを継承して、それを運用するほうが色々と捗ると思います
158
+
159
+
160
+
161
+ ステージのステート管理から見直すのも、一つの手ではあります。

3

破棄に関する説明追加

2019/10/17 15:46

投稿

hermit19901127
hermit19901127

スコア368

test CHANGED
@@ -115,3 +115,15 @@
115
115
  あなたがIsPlayingでゲームの終了をいくら指示しようが、
116
116
 
117
117
  彼らは『Stage1」を開始した時点』での秒読みを、愚直かつ素直に続けます。
118
+
119
+
120
+
121
+ ------------------------------------------------------------
122
+
123
+ 一度購読した命令の「破棄」に関して、こちらが参考になるかもしれません…
124
+
125
+ https://qiita.com/yaegaki/items/bea845df0b011d515afb
126
+
127
+
128
+
129
+ UniRxの機能で一度命令した購読は、こちらの意図するタイミングで「破棄処理」も同時に入れると、意図せぬ場所での購読処理を防止できるかと。

2

補足

2019/10/17 15:41

投稿

hermit19901127
hermit19901127

スコア368

test CHANGED
@@ -77,3 +77,41 @@
77
77
  あと、蛇足ですが、これ、1面で30秒経過してヒントみたいな処理画はした後、
78
78
 
79
79
  1面で苦戦なりして60秒経過すると、2回目の30秒経過でまた同じヒント流れると思います。
80
+
81
+
82
+
83
+ ---------------------------------
84
+
85
+ すみません、また編集…というより
86
+
87
+
88
+
89
+ >クリアしたかどうかは他のプログラムが把握しており、IsPlayingフラグを使って、ゲーム中かそうでないかを判断させています。
90
+
91
+
92
+
93
+ このフラグは残念ながら彼らには意味を成していません。
94
+
95
+
96
+
97
+ IsPlayingであなたがゲームの終了をいくら指示しても、『「Stage1」を開始した時点』で秒読みを指示した彼ら
98
+
99
+ ```C#
100
+
101
+ Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());
102
+
103
+ Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2());
104
+
105
+ Observable.Timer(TimeSpan.FromSeconds(90)).Subscribe(_ => Event3());
106
+
107
+ Observable.Timer(TimeSpan.FromSeconds(120)).Subscribe(_ => Event4());
108
+
109
+ ```
110
+
111
+
112
+
113
+ は、「Stage1」を開始した時点で、秒読みを開始し、
114
+
115
+ あなたがIsPlayingでゲームの終了をいくら指示しようが、
116
+
117
+ 彼らは『Stage1」を開始した時点』での秒読みを、愚直かつ素直に続けます。

1

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

2019/10/17 15:34

投稿

hermit19901127
hermit19901127

スコア368

test CHANGED
@@ -44,40 +44,36 @@
44
44
 
45
45
 
46
46
 
47
- 1.まず1面を始めた時点で
48
-
49
-   Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());
47
+ 文書を読む限り、1面は30秒経過、2面は60秒でヒントのようなものがでると予想されます。
50
-
51
-   上記のみを購読させる
52
48
 
53
49
 
54
50
 
55
- 2.1面をクリアした
51
+ 1面が発生したときに
56
52
 
57
-   Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());
53
+ Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1()); だけを登録
58
54
 
59
-   上記購読の解除
55
+ 1面クリア時に
56
+
57
+ Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1());の登録を解除
60
58
 
61
59
 
62
60
 
63
- 3.2面の開始で
61
+ 2面が発生したときに
64
62
 
65
- Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2());
63
+ Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2()); だけを登録
66
64
 
67
-  上記登録
65
+ 2面クリア時に
66
+
67
+ Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2());の登録を解除
68
68
 
69
69
 
70
70
 
71
- …以下は似たような処理なので省略します
71
+ ような処理を入れるとよいと思います
72
72
 
73
73
 
74
74
 
75
75
 
76
76
 
77
- 上記を検討するのがよい思われますが、
77
+ 、蛇足ですが、これ、1面で30秒経過してヒントみたいな処理画はした後、
78
78
 
79
- UniRxに用意された機能で、そちら想定する実装を叶えられる最適な方法があるような気もします。
79
+ 1面苦戦なりして60秒経過すると2回目30秒経過でまた同じヒント流れると思います。
80
-
81
-
82
-
83
- ひとまず、ソースを見た限りの、発生してるであろう事象について…