简单处理下打砖块,统一打个执行程序包https://xianfa.github.io/download/FishGold.zip。

游戏场景图,增加了碰撞处理,都是固定角度的反弹,就这么着吧。
处理角度处理的主要代码片段,这样的代码我不太满意,后续再看看怎么重构下。
for (int i=0; i<m_vBricks.size(); i++)
{
CImage *pCurBrick = m_vBricks.at(i);
//砖顶碰撞判断
if (vDirection.y > 0
&& m_pBall->GetPosX() >= pCurBrick->GetPosX()
&& m_pBall->GetPosX() <= pCurBrick->GetPosX() + pCurBrick->GetWidth()
&& m_pBall->GetPosY() >= pCurBrick->GetPosY() - m_pBall->GetHeight() / 2
&& m_pBall->GetPosY() <= pCurBrick->GetPosY() + m_pBall->GetHeight() / 2)
{
glm::vec3 vNewDirection = GetBounceDirection(vDirection, glm::vec3(0, -1, 0));
m_pBall->SetVDirection(vNewDirection);
pBrick = pCurBrick;
break;
}
//砖底碰撞判断
if (vDirection.y < 0
&& m_pBall->GetPosX() >= pCurBrick->GetPosX()
&& m_pBall->GetPosX() <= pCurBrick->GetPosX() + pCurBrick->GetWidth()
&& m_pBall->GetPosY() >= pCurBrick->GetPosY() + pCurBrick->GetHeight() - m_pBall->GetHeight() / 2
&& m_pBall->GetPosY() <= pCurBrick->GetPosY() + pCurBrick->GetHeight() + m_pBall->GetHeight() / 2)
{
glm::vec3 vNewDirection = GetBounceDirection(vDirection, glm::vec3(0, 1, 0));
m_pBall->SetVDirection(vNewDirection);
pBrick = pCurBrick;
break;
}
//砖块左面碰撞判断
if (vDirection.x > 0
&& m_pBall->GetPosY() >= pCurBrick->GetPosY()
&& m_pBall->GetPosY() <= pCurBrick->GetPosY() + pCurBrick->GetHeight()
&& m_pBall->GetPosX() >= pCurBrick->GetPosX()
&& m_pBall->GetPosX() <= pCurBrick->GetPosX() + m_pBall->GetWidth() / 2)
{
glm::vec3 vNewDirection = GetBounceDirection(vDirection, glm::vec3(-1, 0, 0));
m_pBall->SetVDirection(vNewDirection);
pBrick = pCurBrick;
break;
}
//砖块右面碰撞判断
if (vDirection.x < 0
&& m_pBall->GetPosY() >= pCurBrick->GetPosY()
&& m_pBall->GetPosY() <= pCurBrick->GetPosY() + pCurBrick->GetHeight()
&& m_pBall->GetPosX() >= pCurBrick->GetPosX() + pCurBrick->GetWidth() - m_pBall->GetWidth() / 2
&& m_pBall->GetPosX() <= pCurBrick->GetPosX() + pCurBrick->GetWidth())
{
glm::vec3 vNewDirection = GetBounceDirection(vDirection, glm::vec3(1, 0, 0));
m_pBall->SetVDirection(vNewDirection);
pBrick = pCurBrick;
break;
}
}
特别说明
本来不想处理打砖块啦,因为OpenGL已经整合完成,但考虑到这些文章的标题,所以还是稍微完善下,就当个正式的结束,有始有终,后续看心情想完善的话再来完善这个程序。