射击游戏的子弹处理问题

        经过近三天的时间,终于把子弹问题处理完了。


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

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定

义为静态的,可以让方法里的代码去改变它。

4. 当然也可给子弹新建一个线程,每一颗子弹对象都是一个新的线程,但是一定要及时结束。

你可能感兴趣的:(射击游戏的子弹处理问题)