• 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);程序就会报错,不信你试试!

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

  • 相关阅读:
    c语言变量的交换
    牛客网 多多的电子字典
    算法笔记----背包九讲 ③多重背包问题
    统计学习方法 课后习题第五章
    2020.8.2 19:00-21:00 拼多多算法岗笔试
    python构建模块
    leetcode 剑指 Offer 51. 数组中的逆序对
    pytorch的内部计算
    matplotlib
    矩阵微积分
  • 原文地址:https://www.cnblogs.com/315358525/p/1505638.html
Copyright © 2020-2023  润新知