質問編集履歴

1

タイトルと文章を編集しました。

2021/02/03 02:27

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 高速で移動する物体同士の矩形での当たり判定を実装したい。が上手く実装出来ない。
1
+ 高速で移動する物体同士の矩形での当たり判定を実装したい
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードですが高速で移動する物体同士の当たり判定ですがどうすれば実装出来るのでしょうか?現状は動く速度割ることのいくつか数値を設定してその割っ値のぶんの数値の回数分少しずつ速度を足しながら衝突判定をしていくというものなのですがどうすれば実装出来るのでしょうか?
1
+ 以下のコードでは矩形の当たり判定ですが高速で移動する物体では当たり先の物体を通り抜けてしまうので判定出来ません。そ際はどうすれば判定をるのでしょうか?
2
2
 
3
3
 
4
4
 
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
-
9
+ 提示コードは矩形の当たり判定ですコードです。
10
10
 
11
11
 
12
12
 
@@ -18,151 +18,27 @@
18
18
 
19
19
 
20
20
 
21
-
22
-
23
21
  // 矩形同士の当たり判定
24
22
 
25
- bool Intersect_2D(Box_Collision_2D& a, Box_Collision_2D& b)
23
+ bool Rect_and_Rect_2D(Box_Collision_2D& a, Box_Collision_2D& b)
26
24
 
27
- {
25
+ {
28
26
 
29
- int maxSpeed = 20;
27
+
30
28
 
31
- if (a.getOnCollision() == true && b.getOnCollision() == true) {
29
+ if (a.getOnCollision() == true && b.getOnCollision() == true)
32
30
 
31
+ {
33
32
 
33
+ // 矩形の衝突判定
34
34
 
35
- printf("a.x: %d\n",a.getMove().x);
35
+ if (((a.getPosition().x + a.getSize().x > b.getPosition().x) && (a.getPosition().x < b.getPosition().x + b.getSize().x))
36
36
 
37
- printf("a.y: %d\n",a.getMove().y);
37
+ && ((a.getPosition().y + a.getSize().y > b.getPosition().y) && (a.getPosition().y < b.getPosition().y + b.getSize().y)))
38
-
39
-
40
-
41
- int aa = a.getMove().length();
42
-
43
-
44
-
45
- int bb = b.getMove().length();
46
-
47
-
48
-
49
- printf("aa: %d\n", aa);
50
-
51
- //printf("bb: %d\n",bb);
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
- int speed = 0;
60
-
61
- if (aa > bb)
62
38
 
63
39
  {
64
40
 
65
- speed = aa / maxSpeed;
66
-
67
- }
68
-
69
- else {
70
-
71
-
72
-
73
- speed = bb / maxSpeed;
74
-
75
- }
76
-
77
-
78
-
79
- printf("speed: %d\n", speed);
80
-
81
-
82
-
83
- if (speed > 0) {
84
-
85
-
86
-
87
- Box_Collision_2D box_a = a;
88
-
89
- Box_Collision_2D box_b = b;
90
-
91
-
92
-
93
- //A
94
-
95
- glm::ivec2 pos = a.getPosition();
96
-
97
- pos = pos - a.getMove();
98
-
99
- box_a.setPosition(pos);
100
-
101
- box_a.setColSize(a.getSize());
102
-
103
-
104
-
105
- //B
106
-
107
- pos = b.getPosition();
108
-
109
- pos = pos - b.getMove();
110
-
111
- box_b.setPosition(pos);
112
-
113
- box_b.setColSize(b.getSize());
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
- for (int i = 0; i < speed; i++)
126
-
127
- {
128
-
129
-
130
-
131
-
132
-
133
- // 矩形の衝突判定
134
-
135
- if (((box_a.getPosition().x + box_a.getSize().x > box_b.getPosition().x) && (box_a.getPosition().x < box_b.getPosition().x + box_b.getSize().x))
136
-
137
- && ((box_a.getPosition().y + box_a.getSize().y > box_b.getPosition().y) && (box_a.getPosition().y < box_b.getPosition().y + box_b.getSize().y)))
138
-
139
- {
140
-
141
- return true;
41
+ return true;
142
-
143
- }
144
-
145
- else
146
-
147
- {
148
-
149
- return false;
150
-
151
- }
152
-
153
-
154
-
155
- glm::ivec2 move(maxSpeed,maxSpeed);
156
-
157
- box_a.setPosition(box_a.getPosition() + move);
158
-
159
- box_b.setPosition(box_b.getPosition() + move);
160
-
161
-
162
-
163
-
164
-
165
- }
166
42
 
167
43
  }
168
44
 
@@ -170,31 +46,9 @@
170
46
 
171
47
  {
172
48
 
173
- // 矩形の衝突判定
174
-
175
- if (((a.getPosition().x + a.getSize().x > b.getPosition().x) && (a.getPosition().x < b.getPosition().x + b.getSize().x))
176
-
177
- && ((a.getPosition().y + a.getSize().y > b.getPosition().y) && (a.getPosition().y < b.getPosition().y + b.getSize().y)))
178
-
179
- {
180
-
181
- return true;
182
-
183
- }
184
-
185
- else
186
-
187
- {
188
-
189
- return false;
49
+ return false;
190
-
191
- }
192
-
193
-
194
50
 
195
51
  }
196
-
197
-
198
52
 
199
53
  }
200
54
 
@@ -208,8 +62,6 @@
208
62
 
209
63
  }
210
64
 
211
- // ################################################################################################################
212
-
213
65
 
214
66
 
215
67
  ```