使用XNA引擎做3D赛车小游戏..(6)
本文完成汽车与障碍物的碰撞检测,也是系列的终结^^ 各位可以自行加入更多功能……
- 因为汽车撞到障碍物一般就是GAME OVER,因此我们在Game1中增加一个bool来标记游戏是否over:
-
bool GameOver = false;
-
- 在Game1的Update方法里,调用CheckInput的位置后面加入判断游戏是否over的语句,
因为我们可以在CheckInput的时候判断玩家是否按下了重新开始游戏按钮,以重置GameOver值。-
if (GameOver)
-
{
-
return;
-
}
-
- 在Game1的Draw方法中,GraphicsDevice.Clear(这是XNA自动生成的清屏语句)之后加入,
如果在方法的最前面加入,则游戏结束时并不会清屏。-
if (GameOver)
-
{
-
return;
-
}
-
- 在Draw方法中,绘制障碍物的循环块前加入
-
BoundingBox box; //障碍物用BoundingBox结构对象代表
-
- 还是在Draw方法中,绘制障碍物的循环块内找到obstacle.ObstacleDraw()方法后面加入以下代码,做碰撞检测:
-
if ((car.carLocation < 0) && (x < 0) || (car.carLocation > 0) && (x > 0))
-
{
-
if (car.CarBoundingSphere.Intersects(box))
-
{
-
GameOver = true;
-
}
-
if (car.CarBoundingSphere.Intersects(box))
-
{
-
GameOver = true;
-
}
-
}
-
- 在CheckInput方法最后加上该语句,用于在按下Enter键时重新开始游戏:
-
if (newState.IsKeyDown(Keys.Enter)) // 是否Enter键被按下
-
{
-
GameOver = false;
-
RoadDepth0 = 0.0f;
-
RoadDepth1 = 100.0f;
-
car.carLocation = 2.5f;
-
car.movingLeft = false;
-
car.movingRight = false;
-
RoadSpeed = 20.0f;
-
}
-
这样汽车在遇到障碍物的时候游戏即GAME OVER,屏幕为全蓝色 - -。
一个简单的3D 小游戏就做完了 - - 。话说没想到第一个C#程序会是这个东东…… Orz
图中的截图是game over之后不清屏的效果。。
2011年11月25日 09:47
非常不错
楼主能提供一下源代码么?
2012年3月09日 09:39
现在才看到.. 虽然不知道还需要不不过蛮发吧:user_files/yoyo/Image/3D%20Race%20Demo.rar