1

私は現在、非常に単純なスプライトから壁への衝突検出プログラムを作成しています。壁に触れていると、棒人間が壁で停止します。私のコードは正常に実行されますが、問題は私のバッター スプライトが壁の左側と上部で停止しないことです (この場合、左側と上部のみの画面の高さと画面の幅です)。これが私のコードです。問題がどこにあるのか、どのように解決すればよいかを理解できますか。

bool check_CollisionWall(oSprite* Sprite1)
{    
    //top left
    if(Sprite1->m_vPosition.x <= 0 && Sprite1->m_vPosition.x + Sprite1->m_nFrameWidth >= SCREEN_WIDTH)
    {
        if(Sprite1->m_vPosition.y <= 0 &&  Sprite1->m_vPosition.y + Sprite1->m_nFrameHeight >= SCREEN_HEIGHT)
        {
            return true;
        }
    }

    //top right
    if(Sprite1->m_vPosition.x+Sprite1->m_nFrameWidth > 0 && Sprite1->m_vPosition.x+Sprite1->m_nFrameWidth >= SCREEN_WIDTH)
    {
        if(Sprite1->m_vPosition.y <= 0 &&  Sprite1->m_vPosition.y+Sprite1->m_nFrameHeight >= SCREEN_HEIGHT)
        {
            return true;
        }
    }

    //bottom left
    if( Sprite1->m_vPosition.x > 0 && Sprite1->m_vPosition.x + Sprite1->m_nFrameWidth <= SCREEN_WIDTH )
    {
        if( Sprite1->m_vPosition.y + Sprite1->m_nFrameHeight > 0 && Sprite1->m_vPosition.y + Sprite1->m_nFrameHeight <= SCREEN_HEIGHT )
        {
            return true;
        }
    }

    //bottom right
    if(Sprite1->m_vPosition.x + Sprite1->m_nFrameWidth > 0 && Sprite1->m_vPosition.x + Sprite1->m_nFrameWidth <= SCREEN_WIDTH)
    {
        if(Sprite1->m_vPosition.y + Sprite1->m_nFrameHeight > 0 &&  Sprite1->m_vPosition.y + Sprite1->m_nFrameHeight <= SCREEN_HEIGHT)
        {
            return true;
        }
    }

    return false;
}
4

2 に答える 2

0

左、上、右、下の壁との衝突を確認するだけです。チェックする左上、右下の組み合わせはありません。

4つの簡単なチェックがあります。

  1. 左の壁の衝突 - スプライトの左側 <=0 かどうかを確認します
  2. 右壁の衝突 - x 座標 + スプライトの幅が >= 右壁インデックスであるかどうかを確認します。
  3. & 4. 左右の壁のロジックと同様に、上下に使用します。

これらは 4 つの独立した if ステートメントになります。私が見ているように、ネストされたifは必要ありません。

それらの 1 つが正を返したとしても、衝突があり、関数は true を返す必要があります。

于 2013-07-09T13:31:09.383 に答える