Java双缓冲机制游戏开发,java游戏思路总结

本文详细介绍了游戏开发的过程,包括创建游戏窗口、绘制人物、实现人物移动、处理键盘输入以控制方向、处理碰撞检测、实现子弹发射、怪物生成和移动,以及暂停和死亡界面的实现。通过监听、线程和对象交互,阐述了游戏循环和事件处理的关键技术。
摘要由CSDN通过智能技术生成

第一步,设置游戏的窗体,

创建一个窗体类,继承Frame,(也可以不继承使用JFrame),然后在该类的构造函数中,使用Frame中的方法,设置窗体的标题,大小,位置,可显,可改变窗体大小,(注意:可以使用Toolkit方法获取屏幕的高宽;setVisible方法的位置);然后添加事件监听,在WindowListener中重写,以实现窗口关闭,(还有一个代码简单的,不过忘了咋写的了),然后创建一个类,做主线程,在main方法里将该窗体类实例化,然后就实现了一个游戏窗体。

第二步,将人物画上去

先在窗体类中重写paint方法,这个重写的paint方法会自动调用,在重写paint方法里,可以把人物画出来,关于图片的添加,在该项目里新建一个包用了存图片,图片的使用,我使用的是一个工具类,别人写好的,我所知道的有一个方法把图片对象化的,别的不太了解。

第三步,人物的移动

创建人物类,定义初始位置,和方向,速度,写一个构造器,这样就可以实例化的时候赋初始值了,写一个画笔的成员方法,在从窗体类中的重写paint方法里传过来画笔,这样这个成员方法也相当于重写paint方法了,再写移动方法,通过判断方法来控制移动,然后在paint方法中调用,现在剩下的问题就是获取方向了,在窗体类中添加按键监听,通过监听获取四个布尔值,四个布尔值对应着四个方向,(四个方向可以用枚举来表示),在写一个成员方法将四个布尔值转变为方向,在人物类中写一个含参数的方法,用来获取方向。

第四步,填加静止状态

在人物类中定义一个布尔值,然后在paint方法中判断就行了

第五步,闪烁问题

解决方法大概有两种

加一个双缓冲或者加一个画布

第六步,子弹发射,连发,消除

这个问题,要找到触发的源头,我像按空格发射子弹,那么源头就是监听空格,我在人物类中写一个开火方法,在监听中调用,而开火方法是用来获取此时人物的位置信息的,这样我们获取了子弹的初始坐标和方向,创建一个子弹类,定义的信息和人物类差不多,创建一个子弹容器,在这里写一个方法获取子弹的初始的位置和方向,这样就可以实现按一次空格,就会往子弹容器里添加一个子弹了,关于内存溢出,在子弹类中写一个方法,通过判断位置来去除这颗子弹,(容器中的子弹用getset方法来获取),然后将该方法在paint方法中调用,这子弹的数量我并没有限制。

第七步,怪物的产生和移动

这里我是开了一个线程,创建一个怪物类,new一个线程,写在该类的构造方法里,这样只要被实例化,线程就开启了,怪物的位置,移动我是通过获取四个随机数来随机生成的,怪物的数量多少和子弹相似,用容器的存储,这时候就要明确怪物的数量了,其他的和人物类相似。

第八步,碰撞,死亡

碰撞我是在窗体类中的重写paint方法中判断的,判断方法我所了解的有两种,判断两个矩形是否相交和判断两图片中心的距离是否超出,既然碰撞了,就会伤害,这时定义怪物和人物的血量和攻击,发生碰撞时判断其血量状态,进行扣血,怪物死亡了就去除这个对象,增加游戏积分,人物死亡就游戏结束

第九步,死亡界面,开始界面添加

在窗体类中定义一个开始的布尔值,在窗体类中添加鼠标监听,监听中改变布尔值,在重写paint方法类判断,该画那个图片。在窗体类中定义死亡的布尔值,人物死亡的时候改变布尔值,这和开始界面相似

第十,暂停界面

这时候,就要说一下刷新了,在主线程里,使用repaint方法,才会让窗体不断的刷新,画面才会动起来,暂停就可以提供一个布尔值来判断是否使用repaint方法。

大概就这些吧,很多都是思路,算是一个小总结,如有不足之处,请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值