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

回答編集履歴

1

追記

2018/05/05 22:21

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -1,3 +1,49 @@
1
1
  > ship(mouseX, mouseY);
2
2
 
3
- shipクラスのインスタンスをsetup()メソッドで生成していないような。
3
+ shipクラスのインスタンスをsetup()メソッドで生成していないような。
4
+
5
+ ---
6
+
7
+ 質問内容が全面的に変わっている(汗)ので追記。
8
+
9
+ 弾幕の判定に関して矩形の衝突とはなにか。
10
+ 物体Aと物体Bの座標が重なっている部分があること。
11
+ ![イメージ説明](768a40b89a92237b03383fed15853e81.png)
12
+ 逆にいうと**座標が重なっていなければの判定**ができれば、背理法で衝突検知はできます。
13
+
14
+ 自機から発射するレーザーも消える条件が特殊な弾の一種と考えるとよいですよ。
15
+ 自機から発射した弾なのか。
16
+ ボスが発射した弾なのか。
17
+ `Bullet`クラスを生成時に渡して、それで判断すれば良いです。
18
+
19
+ この2つの条件が両方ともtrueならば衝突しているという事です。
20
+
21
+ ```Java
22
+ if((A.Left < B.Right) && (A.Right > B.Left)) {
23
+ return true;
24
+ }
25
+ return false;
26
+ ```
27
+ ```Java
28
+ if((A.Top < B.Bottom) && (A.Bottom > B.Top)) {
29
+ return true;
30
+ }
31
+ return false;
32
+ ```
33
+ ---
34
+ 判定を纏めると以下になります。
35
+ ```Java
36
+ if((A.Top < B.Bottom) && (A.Bottom > B.Top)) {
37
+ if((A.Left < B.Right) && (A.Right > B.Left)) {
38
+ return true;
39
+ }
40
+ }
41
+ return false;
42
+ ```
43
+ 衝突検知はパフォーマンスの問題が出てくると思うので、
44
+ 弾幕データのY軸で事前にソートして衝突検知は二分探索で判定する事をお勧めします。
45
+
46
+ 最後に回答に対するフィードバックが一切無い方みたいなので、私はここでギブアップさせて頂きます。
47
+ あとは頑張ってくださいな。
48
+ ◇参考情報
49
+ [4-2. どのように解決したのかを伝えましょう](https://teratail.com/help/question-tips#questionTips4-2)