回答編集履歴

1

投稿ミス

2017/12/08 18:39

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -10,8 +10,28 @@
10
10
 
11
11
 
12
12
 
13
- Padのメソッド内からはballにもアクセスできる(つまりballの位置にもアクセスできる)のでそれにより衝突判定に必要な情報を得ることができます。
13
+ Padのメソッド内からはballにもアクセスできる(つまりballの位置にもアクセスできる)のでそれにより衝突判定に必要な情報を得ることができます。同様にBallのメソッドからpadにアクセスできますので、衝突判定はBallのmoveでもできます。どちらがよいかは実際に書いてみてご自分で判断する方が学習効果が高いと思います。
14
14
 
15
15
 
16
16
 
17
- 上記はBallのメソッドからpadにアクセスちなみに衝突判定をPadのmoveやろうとしているようですが、Ballのmoveもできます。どちらがよいかは実際に書いみてご自分でする学習効果が高いいます。
17
+ なお衝突判定BallPadの垂直方向の位置関係、水平方向の位置関係」決まりますが、Ball, Padいずれも移動速度が1以上なので、ある程度の幅を持たせて判する必要あるこに注意してくださたBallは斜めに移動しているので、例えば
18
+
19
+
20
+
21
+ 水平方向の位置(x):100、速度:5
22
+
23
+ 垂直方向の位置(y):200、速度:4
24
+
25
+
26
+
27
+ だとすれば次の瞬間にはx=105,y=204になるわけですが、もしPadの垂直位置y=202だとしたらその位置でのBallの位置はx=102.5になるといったことも考慮する必要があろうかと思います。
28
+
29
+
30
+
31
+ ---
32
+
33
+ 余談ですが・・・
34
+
35
+ awtのコンポーネントCanvasはダブルバッファリング機構を持ってません。しかしswingのコンポーネントはデフォルトでダブルバッファんリングを持っています。おそらくWindowsでもMacintoshでもLinuxでもデフォルトでダブルバッファんリングが有効になっている気がします。このためBlockCanvasをCanvas(=awtコンポーネント)からJComponent(=swingコンポーネント)に変えるだけで、現在実装しているダブルバッファリングは必要なくなり単純にJComponent#paintComponentでそのまま描画しても画面のちらつきはなくなります。
36
+
37
+ 課題の条件に「自前でダブルバッファリングせよ」というのが入っているなら今のままにする必要がありますが、そうでないならJComponentの派生クラスとした方がプログラムがすっきりします。