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

回答編集履歴

2

フローチャート追加

2019/09/11 08:55

投稿

fana
fana

スコア12203

answer CHANGED
@@ -32,4 +32,16 @@
32
32
  if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) の条件を**満たしていなくても**,
33
33
  if (lockonMove > 0)の条件の判定が行われ,その時のlockonMoveの値がこの条件を満たしていればlockonMoveの値がインクリメントされるわけです.
34
34
 
35
- 全く違いますよね.
35
+ 全く違いますよね.
36
+
37
+ ---
38
+
39
+ 変数lockonMoveに関係する部分についてフローチャートを簡単に描いてみました.
40
+ (Key[KEY_INPUT_R] == 1 && playerY == enemyY)という条件は図に書込むには長ったらしいので,下図ではこれを「条件1」と記述しています.
41
+ 処理は一番上から始まって矢印の順で進んでいきます.
42
+ 菱型がifに相当する処理分岐です.条件を満たす場合は下方向に,満たさない場合は右方向に処理が進みます.
43
+
44
+ 差は一目瞭然かと思います.
45
+ 右側のフローチャートでは,lockonMove=1;の処理を通らずに++lockonMove;の処理を通るフローが存在することがわかります.
46
+ **処理の流れがわからない場合はこういうのを自分で描いてみて確認すると良いでしょう.**
47
+ ![イメージ説明](2c27fb08068cefc966dd8d8c753674d9.png)

1

より明確化

2019/09/11 08:55

投稿

fana
fana

スコア12203

answer CHANGED
@@ -12,14 +12,15 @@
12
12
  ...
13
13
  ```
14
14
 
15
+ 上記の抜粋コードでは,
15
16
  if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) の条件を**満たしたとき**,
16
17
 
17
- * lockonMoveの値が1になります.lockonMove=1; と書いてあるので.
18
+ * lockonMoveの値が1になります.lockonMove=1; と書いてあるので.
18
19
  * **その次に**,if (lockonMove > 0)の条件の判定が行われます.今,lockonMoveの値は1なので,条件を満たします.そうすると ++lockonMove; が実行されるので,値は2になります.
19
20
 
20
21
  以上に関しては大丈夫でしょうか?
22
+ lockonMoveの値は1になった後,直後にすぐ2になるわけです.間髪入れずに(?) 結果は2になりますね.
21
23
 
22
-
23
24
  さて,(このコード部分がループの中にあって,繰り返し実行されるような場合を想定すると)
24
25
  **次に if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) の条件を満たしたときには,上記の事柄がまた起こる**わけです.結果として,lockonMoveは2になります.
25
26
  何度やっても同じです.**毎回上記の処理が実行されるわけですから,いつも2になります.**