ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

壁で反射 改良

昨日の壁で反射する方法(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;
}

変更したのは、速度を反転するだけでなく座標も壁の位置へ戻しているところ。これで減速しているような場合でも大丈夫。