Java小游戏中发射子弹的问题

下面说说对于子弹处理方面我的总结。

  1. 首先说线程的问题

    我做的射击游戏目前只有一个线程,可以达到移动枪支,目标,和射击子弹的效果。

    这唯一的线程就是主框架的Paint的方法(我没加面板,直接在JFrame上画的,会闪,需要做双缓冲),做的线程就是一直让它repaint(sleep(50)),就像咱们的屏幕在一直刷新。里面分别调用了不同对象的paint方法(只需传画笔g),所以如果不加判断条件,所有的物体一开始都在不停的画。加了条件之后,我们想让他动起来,则只需不断改变他们的坐标即可(所谓的物体移动速度speed,就是指每次坐标改变的大小)。

  2. 每颗子弹不一定都是线程,但一定都是一个对象。

    它有自己的图片,大小,坐标,轨迹。

    每按一下键,建立一个子弹对象。

    建议用Arrylist做一个子弹容器,把每一个子弹对象都放进去,再主Paint方法里遍历容器中的每一个子弹,分别画出来(for循环),所以容器里有多少颗子弹,就会瞬间画多少颗,碰到边界时可以直接移除。虽然每颗子弹对象都属于同一类,但每建一个新的对象它的初始数据都是全新的,不互相干扰,主要的一点就是开火时的坐标,这里就要注意静态变量和非静态变量的问题了。

  3. 静态变量和非静态变量的问题

    由于我的枪支可以移动,所以每发子弹的初始坐标也不相同,所以每颗子弹对象在刚创建的时候都要坐标赋予不同的

初始坐标,我的方法时在枪类里定义一个变量x_gun,让时时变化更新的枪对象的坐标x不停赋给x_gun,当子弹创建的时候

让子弹的初始坐标等于x_gun就行了。这个思路是正确的,但必须要注意静态变量和非静态变量的问题。

由于时时变化的调用枪坐标x和x_gun是在方法里,如果让x_gun=x,x_gun是没有被赋值的,。解决方法就是把x_gun定义为静态的,可以让方法里的代码去改变它。

上一篇:jq+vue 使用clipboard实现复制内容到剪切板


下一篇:士兵突击案例