XNA开发思考之二开火吧坦克!

此为原创,转载请注明作者和出处,谢谢!

坦克今天终于开火了,首先附上视频好做展示:http://v.youku.com/v_show/id_XOTkzNDQ5ODg=.html

下面就tank开火简单做说明!

首先说到tank开火就会有击中敌人带有爆炸效果,而爆炸效果可以在前面有介绍,一副图片上有一系爆炸瞬时的效果,

把它们一祯祯绘制出来,连续播放就会有爆炸的效果!具体的代码在游戏源代码下载中,这就就不做介绍了。这里主要介绍

炮弹飞行和如何检测到碰撞敌方目标。炮弹的飞行和tank的运行原理是一样的,只不过炮弹多了一个标志是否存活的bool型的

判断,如果炮弹存活这继续飞行,如果击中目标则死亡消失,不在绘制它。同时又可以打下一发炮弹。

List<GameObject> tankBullet = new List<GameObject>();  //定义炮弹的集合

其中GameObject类在源代码中有说明这里就不在解释了。

Code

这是写在LoadContent()中的,意思也不加载10发炮弹,当然数量也可以修改。

 

Code

上述代码就是具体控制tank及炮弹飞行,与敌车相碰及爆炸效果应该在哪点发生。付有注释通俗易懂,玩家请自己研究。

在玩家仔细看了源代码后,会有这样的疑问,为什么敌车生成与炮弹,爆炸效果的生成不一样,炮弹与爆炸效果都是基于

GameObject这个类,而敌车的出现却是List<Vector2> enemys = new List<Vector2>();  对了,这是我故意区分的,

其实敌车也可以基于GameObject这个类,如果炮弹击中敌车,敌车也方便在屏幕上消失。那么为什么我非要这样写呢?

这样写也能达到GameObject的效果,同时在LoadContent中你会发现它并没有用for来循环加载,而是在Update循环中时时

更新数组中敌车的坐标,而被击中时我将敌车的位置放到(0,0)处,其实这样并不好,因为它并没有完全消失,这一点上就没有基于

GameObject类的写法好,如果用enemys.RemoveAt(i);程序就会报错,不信你试试!

如果玩家您有什么好的想法及建议,麻烦留言,大家一起研究!

posted on 2009-06-18 11:19  一盘散沙  阅读(1902)  评论(7编辑  收藏  举报

导航