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

回答編集履歴

1

投稿ミス

2017/12/08 18:39

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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