我目前正在做一個非常簡單的雪碧到牆碰撞檢測程序,我的火柴人將停在牆壁,如果它是觸摸它。我的代碼運行良好,但問題是我的火柴人精靈不會停在左側和牆的頂部(在這種情況下,屏幕高度和屏幕寬度僅適用於左側和頂部)。這裏是我的代碼,你能找出問題出在哪裏,我該如何解決它。SDL碰撞檢測
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;
}
我可能會誤解,但是您的代碼似乎被構造爲定義碰撞,因爲當同時達到或超過垂直邊界和水平邊界時。如果超出垂直邊界或超出水平邊界,碰撞條件是否也會得到滿足? –