回答編集履歴

1

見直しキャンペーン中

2023/07/29 14:11

投稿

TN8001
TN8001

スコア9884

test CHANGED
@@ -1,133 +1,67 @@
1
1
  > ずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。
2
2
 
3
-
4
-
5
3
  `if (y <= 25 || y >= height - 25) dy = -dy;`
6
-
7
- としているので当然だと思うのですが。
4
+ としているので当然だと思うのですが。。。
8
-
9
-
10
5
 
11
6
  `if (y <= 25 || y >= height - 25) dy = 0;`
12
-
13
7
  とすれば跳ね返らずに止まりますが、そういう意味じゃないんですよね?
14
-
15
8
  aキーを押した後**だけ**、下で止めるという意味でしょうか??
16
9
 
17
-
18
-
19
10
  だとすると、aキーを押した後だとわかる「何か」が判定に必要になります。
20
-
21
11
  何かフラグ(`boolean`)を用意してもいいですが、幸い?`dy`が変わっているのでそれで判断しました。
22
12
 
23
-
24
-
25
13
  ```Processing
26
-
27
14
  int x, y, dx, dy;
28
15
 
29
-
30
-
31
16
  void setup() {
32
-
33
17
  size(500, 500);
34
-
35
18
  x = width / 2;
36
-
37
19
  y = height / 10;
38
-
39
20
  //dx = 0;
40
-
41
21
  //dy = 0;
42
-
43
22
  }
44
23
 
45
-
46
-
47
24
  void draw() {
48
-
49
25
  background(255);
50
-
51
26
  noStroke();
52
-
53
27
  fill(111, 183, 255);
54
-
55
28
  ellipse(x, y, 50, 50);
56
-
57
29
  x += dx;
58
-
59
30
  y += dy;
60
-
61
31
  if (x <= 25 || x >= width - 25) dx = -dx;
62
-
63
32
  if (y <= 25 || y >= height - 25) dy = -dy;
64
33
 
65
-
66
-
67
34
  // dy == 10 としたいところだが、↑でひっくり返っているので -10
68
-
69
35
  if (dy == -10 && y >= height - 25) {
70
-
71
36
  dy = 0; // フレームごとのy移動量を0にする(=止める)
72
-
73
37
 
74
-
75
38
  // aを連打すると沈んでいってしまうので、はみ出さないように矯正
76
-
77
39
  y = height - 25;
78
-
79
40
  }
80
-
81
41
  }
82
42
 
83
-
84
-
85
43
  void mousePressed() {
86
-
87
44
  switch (mouseButton) {
88
-
89
45
  case LEFT:
90
-
91
46
  dy = 3;
92
-
93
47
  break;
94
-
95
48
  }
96
-
97
49
  }
98
50
 
99
-
100
-
101
51
  void keyPressed() {
102
-
103
52
  switch (key) {
104
-
105
53
  case 'a':
106
-
107
54
  dy = 10;
108
-
109
55
  break;
110
-
111
56
  }
112
-
113
57
  }
114
58
 
115
-
116
-
117
59
  //void keyReleased() {
118
-
119
60
  // switch (key) {
120
-
121
61
  // case 'a':
122
-
123
62
  // case 'd':
124
-
125
63
  // dx = 0;
126
-
127
64
  // break;
128
-
129
65
  // }
130
-
131
66
  //}
132
-
133
67
  ```