刚开始要写一个java小游戏可能无处下手,自己学了很多java技能,但要把技能连贯起来写程序毫无头脑,这是很多人第一次写自己的程序都会遇到的现状。
但当我们看一两个博主的java游戏制作视频,我们就会豁然开朗,其实简单的小游戏制作过程基本套用一个思路。我们加以分析总结,就能逐步写出一个属于自己的java小游戏。
言归主题,写java小游戏首先我们要有大体思路框架,我们要大体画出游戏的思维导图,越详细越好,在写游戏的过程中不断修改完善。
首先创建一个主界面类,同时在这个主界面类内创建main方法,这就是整个程序的入口。我们在这个类内绘制图形窗口,也就是我们的游戏窗口。这时我们的主界面类需要继承JFrame类(这样才能创建窗口,监听鼠标键盘等),在主界面类中我们创建绘制窗口的启动方法winstart()在这个方法中初始化游戏窗口。并且在该主界面类中添加画笔的方法paint(),在这个画笔方法中来绘画图形以及绘画你要加载的所有游戏元素。
然后我们在winstart()中添加repaint()方法,这个repaint()方法是重绘,就是重新绘制paint()中的所有图形图片元素,也就是我们看到的游戏界面。游戏不是所有元素一动不动,而是一这些元素不断绘制连续转换,造成视觉上的视频连续播放。这就需要一直调用repaint()方法,直接在这个方法外加一个while循环即可实现连续调用,快速无限调用不行,所以要加上线程休眠(sleep)设置每隔多少毫秒来绘制一次,但在线程休眠要加try—catch语块进行异常处理。
上述方法是在游戏窗口实现视频形式的连续绘画,但是这样每个游戏元素在窗口的快速一次次绘制,游戏元素的移动,会出现视觉上的游戏元素不停闪烁问题。这里要用双缓存技术,双缓存简述为先把所有游戏元素全部绘画到一张图片上,然后再把一张张图片连续调用,就像电影一样是一张张图片快速连续转换。实现是先在主界面类中创建一张尺寸和游戏窗口一样大的图片,然后获得该图片的画笔对象,把所有要绘制的游戏元素通过该画笔对象绘画到这张图片上,实现repaint()重复绘制该张图片。
接下来后面是实现游戏元素的添加,我们要添加很多元素和对象。这个时候我们要想到JAVA的继承,利用先编写父类,然后各个子类及对象用继承父类的方法,可以大大减少重复代码的编写,提高工作量。在父类中我们添加对象共有的横纵坐标,宽度高度,图片等元素进行封装,然后添加paintitself()方法用以实现元素绘制,添加getRec()方法实现物体矩形碰撞。后面的子类对其进行继承并重写,实现自身特定方法。JAVA面向对象,核心:封装,继承,多态皆现与此。
简述一下游戏主角的移动,(1)移动需要改变坐标(x,y)和方向(四个方向,写枚举类把四个方向添加其中),在游戏主角的类中写出四个方法,例如其中一个方法如果向右移动可以写入x+1,并把方向赋值给右。(2)添加键盘事件,我们可以定义boolean的方法,返回值为true或false。定义两个键盘事件方法(添加四个按键分别代表四个移动方向),在方法内用switch来判断按键值,一个方法判断按下,另一个方法判断松开。可以实现按下对应按键,游戏主角会一直移动,松开按键则不移动。(3)写判断移动方向的方法,通过按键返回的按键值,来调用对应移动方法。(4)写移动方法,方法内仅改变一个坐标即可实现移动。
我们应当把移动方法写到父类中,这样不仅游戏主角可以通过这个方法移动,其他游戏元素如敌人也可以通过移动方法,再加调用方法实现敌人的移动。
碰撞检测,利用getRec()和intersects来判断两个元素是否碰撞,如果碰撞可以在该if语句中执行要进行的操作。例如要敌人和游戏主角进行碰撞检测实现碰撞后的敌人消失,先新建一个敌人的List集合,把这个碰撞的敌人添加到一个这个List集合中,在重绘的时候再用removeAll()的方法清除该集合元素,从而实现碰撞后的敌人消失功能。
关于游戏主角发射子弹功能可以让该子弹类继承游戏主角类,通过游戏主角的坐标可以从游戏主角内初始化该子弹。更多游戏功能都是通过创建类并继承,重写实现自身特定功能。