回答編集履歴

1

追記

2018/05/05 22:21

投稿

umyu
umyu

スコア5846

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