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

回答編集履歴

1

見直しキャンペーン中

2023/07/29 14:11

投稿

TN8001
TN8001

スコア10114

answer CHANGED
@@ -1,67 +1,67 @@
1
- > ずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。
2
-
3
- `if (y <= 25 || y >= height - 25) dy = -dy;`
4
- としているので当然だと思うのですが。
5
-
6
- `if (y <= 25 || y >= height - 25) dy = 0;`
7
- とすれば跳ね返らずに止まりますが、そういう意味じゃないんですよね?
8
- aキーを押した後**だけ**、下で止めるという意味でしょうか??
9
-
10
- だとすると、aキーを押した後だとわかる「何か」が判定に必要になります。
11
- 何かフラグ(`boolean`)を用意してもいいですが、幸い?`dy`が変わっているのでそれで判断しました。
12
-
13
- ```Processing
14
- int x, y, dx, dy;
15
-
16
- void setup() {
17
- size(500, 500);
18
- x = width / 2;
19
- y = height / 10;
20
- //dx = 0;
21
- //dy = 0;
22
- }
23
-
24
- void draw() {
25
- background(255);
26
- noStroke();
27
- fill(111, 183, 255);
28
- ellipse(x, y, 50, 50);
29
- x += dx;
30
- y += dy;
31
- if (x <= 25 || x >= width - 25) dx = -dx;
32
- if (y <= 25 || y >= height - 25) dy = -dy;
33
-
34
- // dy == 10 としたいところだが、↑でひっくり返っているので -10
35
- if (dy == -10 && y >= height - 25) {
36
- dy = 0; // フレームごとのy移動量を0にする(=止める)
37
-
38
- // aを連打すると沈んでいってしまうので、はみ出さないように矯正
39
- y = height - 25;
40
- }
41
- }
42
-
43
- void mousePressed() {
44
- switch (mouseButton) {
45
- case LEFT:
46
- dy = 3;
47
- break;
48
- }
49
- }
50
-
51
- void keyPressed() {
52
- switch (key) {
53
- case 'a':
54
- dy = 10;
55
- break;
56
- }
57
- }
58
-
59
- //void keyReleased() {
60
- // switch (key) {
61
- // case 'a':
62
- // case 'd':
63
- // dx = 0;
64
- // break;
65
- // }
66
- //}
1
+ > ずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。
2
+
3
+ `if (y <= 25 || y >= height - 25) dy = -dy;`
4
+ としているので当然だと思うのですが。。。
5
+
6
+ `if (y <= 25 || y >= height - 25) dy = 0;`
7
+ とすれば跳ね返らずに止まりますが、そういう意味じゃないんですよね?
8
+ aキーを押した後**だけ**、下で止めるという意味でしょうか??
9
+
10
+ だとすると、aキーを押した後だとわかる「何か」が判定に必要になります。
11
+ 何かフラグ(`boolean`)を用意してもいいですが、幸い?`dy`が変わっているのでそれで判断しました。
12
+
13
+ ```Processing
14
+ int x, y, dx, dy;
15
+
16
+ void setup() {
17
+ size(500, 500);
18
+ x = width / 2;
19
+ y = height / 10;
20
+ //dx = 0;
21
+ //dy = 0;
22
+ }
23
+
24
+ void draw() {
25
+ background(255);
26
+ noStroke();
27
+ fill(111, 183, 255);
28
+ ellipse(x, y, 50, 50);
29
+ x += dx;
30
+ y += dy;
31
+ if (x <= 25 || x >= width - 25) dx = -dx;
32
+ if (y <= 25 || y >= height - 25) dy = -dy;
33
+
34
+ // dy == 10 としたいところだが、↑でひっくり返っているので -10
35
+ if (dy == -10 && y >= height - 25) {
36
+ dy = 0; // フレームごとのy移動量を0にする(=止める)
37
+
38
+ // aを連打すると沈んでいってしまうので、はみ出さないように矯正
39
+ y = height - 25;
40
+ }
41
+ }
42
+
43
+ void mousePressed() {
44
+ switch (mouseButton) {
45
+ case LEFT:
46
+ dy = 3;
47
+ break;
48
+ }
49
+ }
50
+
51
+ void keyPressed() {
52
+ switch (key) {
53
+ case 'a':
54
+ dy = 10;
55
+ break;
56
+ }
57
+ }
58
+
59
+ //void keyReleased() {
60
+ // switch (key) {
61
+ // case 'a':
62
+ // case 'd':
63
+ // dx = 0;
64
+ // break;
65
+ // }
66
+ //}
67
67
  ```