前言:这篇文章主要介绍一下射击类游戏的设计思路,较为经典的就是飞机大战,我们用java swing来实现
简单介绍一下,就是玩家可以通过键盘控制飞机移动,飞机能够发射子弹,敌机从屏幕上方出现。玩家需要躲避敌机并且击落它,获得相应分数。
最基本的就是需要有一个窗口类
游戏窗口显示------GameUI类
有了游戏窗口类,接下来要再有一个界面类
作为游戏画布------GamePanel类
用来绘制背景、飞机、子弹等那些素材
ps:panel对象也要写在可视化前面,不然看不见
为了控制飞机的移动和子弹的发射并不可少的就是监听器类
监听器类------分为键盘监听器还有鼠标监听器
鼠标监听器(GameMouseListener):按鼠标来控制子弹的发射
创建鼠标对象
创建鼠标监听器对象,加在面板上也就是panel类上
以前我们写鼠标监听器的时候都是实现接口,但是接口就是一定要重写接口里的所有方法,但是有些接口里的方法我们有些方法又不需要用到,这时候就可以想到,我们可以继承类MouseAdapter,这样就只要写我们需要用的方法
键盘监听器(GameKeyListener):WASD分别用来控制飞机的前后左右的移动
键盘监听器我们这里还是继承类来实现
W:向上移动
A:向左移动
S:向下移动
D:向右移动
J:发射子弹
步骤:
导包、
实现接口
注册监听器
获得焦点
这里以前没有接触到的就是获得焦点,如果没有焦点、键盘事件不会触发
三个监听方法
keyPressed():按下按键时执行
keyReleased():松开按键时执行
keyTyped():输入字符时触发
KeyEvent对象
三个方法都会得到一个参数:KeyEvent e
它表示本次按键事件
获取按键时按下的是哪个键e.getKeyCode()
线程(Thread)
概念
就是程序中的一条执行路线
一个程序进行时,可以同时存在多个线程,每个线程负责不同的任务
主线程main
Java程序启动时,即使我们没有自己创建线程,也会自动存在一个线程
创建线程------继承Thread类
gameThread.start();创建线程类
重写run()方法
run()中编写的就是这个线程以后要执行的任务
创建线程对象
GameThread gameThread = new GameThread();启动线程
gameThread.start();start()和run()的区别
start()作用:gameThread.start();就是启动一个新的线程,会执行run()方法中的代码
run()作用:gameThread.run();如果直接调用run(),本质上只是普通的方法调用,并不会启动一个新的线程。
Thread.sleep()
作用:
让当前正在执行的线程暂停一段时间。