Liny_@NotePad

沉迷ACG中

使用XNA引擎做3D赛车小游戏..(6)

YOYO posted @ 2009年9月27日 22:36 in 【游戏开发】 with tags XNA , 5469 阅读

本文完成汽车与障碍物的碰撞检测,也是系列的终结^^ 各位可以自行加入更多功能……

截图如下:

  1. 因为汽车撞到障碍物一般就是GAME OVER,因此我们在Game1中增加一个bool来标记游戏是否over:
    1. bool GameOver = false;
  2. 在Game1的Update方法里,调用CheckInput的位置后面加入判断游戏是否over的语句,
    因为我们可以在CheckInput的时候判断玩家是否按下了重新开始游戏按钮,以重置GameOver值。
    1.             if (GameOver)
    2.             {
    3.                 return;
    4.             }
  3. 在Game1的Draw方法中,GraphicsDevice.Clear(这是XNA自动生成的清屏语句)之后加入,
    如果在方法的最前面加入,则游戏结束时并不会清屏。
    1.             if (GameOver)
    2.             {
    3.                 return;
    4.             }
  4. 在Draw方法中,绘制障碍物的循环块前加入
    1. BoundingBox box;                                                            //障碍物用BoundingBox结构对象代表
  5. 还是在Draw方法中,绘制障碍物的循环块内找到obstacle.ObstacleDraw()方法后面加入以下代码,做碰撞检测:
    1. if ((car.carLocation < 0) && (x < 0) || (car.carLocation > 0) && (x > 0))
    2. {
    3.         box.Min = new Vector3(x - 1, 0.7f - 1, RoadDepth0 - depth - 1);
    4.         box.Max = new Vector3(x + 1, 0.7f + 1, RoadDepth0 - depth + 1);
    5.         if (car.CarBoundingSphere.Intersects(box))
    6.         {
    7.                 GameOver = true;
    8.         }
    9.         box.Min = new Vector3(x - 1, 0.7f - 1, RoadDepth1 - depth - 1);
    10.         box.Max = new Vector3(x + 1, 0.7f + 1, RoadDepth1 - depth + 1);
    11.         if (car.CarBoundingSphere.Intersects(box))
    12.         {
    13.                 GameOver = true;
    14.         }
    15. }
  6. 在CheckInput方法最后加上该语句,用于在按下Enter键时重新开始游戏:
    1.             if (newState.IsKeyDown(Keys.Enter))   // 是否Enter键被按下
    2.             {
    3.                 GameOver = false;
    4.                 RoadDepth0 = 0.0f;
    5.                 RoadDepth1 = 100.0f;
    6.                 car.carLocation = 2.5f;
    7.                 car.movingLeft = false;
    8.                 car.movingRight = false;
    9.                 RoadSpeed = 20.0f;
    10.             }

 

这样汽车在遇到障碍物的时候游戏即GAME OVER,屏幕为全蓝色 - -。

一个简单的3D 小游戏就做完了 - - 。话说没想到第一个C#程序会是这个东东…… Orz
图中的截图是game over之后不清屏的效果。。

good 说:
2011年11月25日 09:47

非常不错
楼主能提供一下源代码么?

Head_small
YOYO 说:
2012年3月09日 09:39

现在才看到.. 虽然不知道还需要不不过蛮发吧:user_files/yoyo/Image/3D%20Race%20Demo.rar


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter