昨日の壁で反射する方法(id:toburau:20080604)。HIZさんよりコメントを頂いたので改良。
昨日の方法ではボールの速度は変化せず、壁は動かない場合はうまくいくが、速度が変化する場合などうまくいかない。たとえばボールが減速しているような場合、反射し続けてしまう。
そこで、次のように改良。
float x; // x座標 float y; // y座標 float vx; // x速度 float vy; // y速度 void move() { if ( x < 0.0f ) { vx *= -1.0f; x = 0.0f; } else if ( x > SCREEN_WIDTH ) { vx *= -1.0f; x = SCREEN_WIDTH; } if ( y < 0.0f ) { vy *= -1.0f; y = 0.0f; } else if ( y > SCREEN_HEIGHT ) { vy *= -1.0f; y = SCREEN_HEIGHT; } x += vx; y += vy; }
変更したのは、速度を反転するだけでなく座標も壁の位置へ戻しているところ。これで減速しているような場合でも大丈夫。