回答編集履歴

1

見直しキャンペーン中

2023/07/22 08:57

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -1,59 +1,30 @@
1
1
  > 50ダメージを受ける設定なのに一度に100ダメージ受けてしまう
2
2
 
3
-
4
-
5
3
  3つとも同じですが、代表して●で説明します。
6
-
7
4
  カーソルに当たった時に`drop_hp = drop_hp - 50;`としています。
8
-
9
5
  `update()`の中の、
10
-
6
+ ```Processing
7
+ if (drop_hp < 0 ) {
8
+ location.y = 0;
9
+ drop_hp = drop_hp + 50;
10
+ }
11
11
  ```
12
-
13
- if (drop_hp < 0 ) {
14
-
15
- location.y = 0;
16
-
17
- drop_hp = drop_hp + 50;
18
-
19
- }
20
-
21
- ```
22
-
23
12
  で位置のリセットのつもりですが、`drop_hp`は0なので`if`の中には入りません。
24
-
25
13
  次のフレームでもまだカーソル付近にいるので、もう一度当たります。
26
-
27
14
  -50になって初めて`if`に入り、位置がリセットされるので`life`が2回減るのが頻発します。
28
15
 
29
-
30
-
31
16
  `if (drop_hp <= 0 )`にすれば直ります。
32
-
33
17
  そもそも`update()`で判断するまでもなく、`end()`で`location.y = 0;`すればよいのではありませんか?
34
-
35
18
  それなら`drop_hp`も不要になりますが、この後「弾を出して撃ち落とす」等の構想ですかね。
36
-
37
-
38
19
 
39
20
  ---
40
21
 
41
-
42
-
43
- `i` `j` `k`がグローバル変数なのは、さすがによくないです。
22
+ `i``j``k`がグローバル変数なのは、さすがによくないです。
44
-
45
23
  `end()`の`if (mouseX + 15 > posX[i] 。。。`で必要だからですが、よく見てください。
46
-
47
24
  `display()`で`posX[i] = location.x;`としています。
48
25
 
49
-
50
-
51
26
  つまり`if (mouseX + 15 > location.x。。。`でいいのです。`posX`等は必要ないのです。
52
-
53
27
  これでかなりのグローバル変数を減らせます。クラスを作った意味が出てきました。
54
28
 
55
-
56
-
57
- `time` `elapsedTime` `score`あたりもローカル変数にできるはずです。
29
+ `time``elapsedTime``score`あたりもローカル変数にできるはずです。
58
-
59
30
  いろいろなところに散らばった変数の再初期化も、`gameInit()`に集約すると見通しが良くなると思います。