飞机大战总结

发现Java有很多实用的方法如鼠标操作,可以通过获得鼠标反馈实现功能

可以通过重写paint方法来为游戏添加各种元素,paint是每次打印方框都会自动执行,

面对对象编程,思考游戏内所有东西归类如照片素材类,游戏元素类,然后可以创造一个共同的父类

问题:为什么不能在if里面写循环重绘

飞机大战的爆炸很有意思,在生成新的爆炸地点的时候,不直接赋予图片而是在方法里赋予,然后通过一张一张的小图片循环播放

飞机大战中各元素的生成其实是事先先在各个位置生成应有的元素,再在打印的时候去一个一个打印

问    为什么可以直接访问

答    因为在方法里面才能直接调用

飞机大战整体思路:

先创建一个窗口类,初始化所有属性,巧妙之处:弄一个死循环:然后每循环一次都打印一次画面:有助与状态的更新,因为如果在打印内进行状态转换很难,然后因为每次都要调用一次打印函数,相当于循环就在主程序·内弄一个循环,每次都判断游戏状态;然后把游戏内的所用到的全部对象都创建一个类,其中窗口并不是必须的,然后图片也可以在其中赋值,如爆炸类中,初始化时并不需要直接赋值图片,而是在生成爆炸图像的时候,弄一个数组装入需要产生的图片,然后每一个爆炸对象被遍历到时,每次打印都打印其中一张图片,然后下次打印继续打印

super内容就是原函数的内容,如如果把super放在爆炸循环之外,那么爆炸不会消失,而是会打印在那一个区域,因为他的图片只会是最后一张,而结束爆炸的原理就是当if不成立的时候,则super不会执行,那么就不打印了,

子弹产生的原理就是创造子弹数组,然后让子弹的坐标等于要产生子弹的目标的坐标然后根据需要,进行坐标的变化

其中坐标变化的原因是paint函数的不断执行,导致打印函数的执行,然后坐标变化、

然后碰撞检测就是通过目标的坐标以及宽高根据Java的提供的函数intersect函数进行检测

public boolean intersects(Rectangle r) {

    int tw = this.width;

    int th = this.height;

    int rw = r.width;

    int rh = r.height;

    if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {

        return false;

    }

    int tx = this.x;

    int ty = this.y;

    int rx = r.x;

    int ry = r.y;

    rw += rx;

    rh += ry;

    tw += tx;

    th += ty;

    //      overflow || intersect

    return ((rw < rx || rw > tx) &&

            (rh < ry || rh > ty) &&

            (tw < tx || tw > rx) &&

            (th < ty || th > ry));

}

最后游戏状态的转换就是根据飞机自身的血量和boss血量,其中不要在弄循环,因为无论当前状态是什么,下一次都会进行状态检测,不要弄循环了

飞机大战结束、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容