本质理解
键盘和程序交互原理:
-
每次按下键、松开键触发响应的键盘事件。
-
按下和松开用true和false表示
-
将事件封装到KeyEvent对象中
-
识别按下哪个键就是对键盘进行编号
-
编号通过KeyEvent对象来查询
-
-
本项目有四个方向,设置四个基本方向,按下=true,松开=false,左右移动只需要对其进行加、减即可
键盘监听是一个内部类
示例:
/*
定义一个键盘监听的内部类
KeyMonitor继承于KeyAdapter
*/
class KeyMonitor extends KeyAdapter{
/*重写父类的两个方法,按下、抬起*/
/*重写按下键方法*/
//keyEvent是一个对象,包含了所有按下键的信息
在Plane类中增加几个新的变量用于飞机的控制
流程梳理:
-
增加四个变量控制飞机上、下、左、右四个方向
-
流程控制:
-
方向向左:y-,方向向右:y+,方向向上:x+,方向向下:x-
-
当键盘监听到按下事件的时候,飞机向上移动---坐标轴变化
-
到键盘监听到松开事件的时候,飞机向上移动的事件取消,变为不动的状态
-
为此需要写两个方法---增加方向,取消方向
键盘与游戏物体的交互:
方法一:
/*
给飞机增加几个新的变量
代表飞机的方向
设置飞机的速度,继承、重写
*/
int speed = 30;
boolean left,right,up,down;
/*增加方向*/
/*
因为要和键盘交互,当监听到事件的时候会调用这个方法
所以形参是监听到按下的键---KeyEvent的对象作为形参
按下某个键。增加相应的方向
*/
public void addDirection(KeyEvent e){
switch (e.getKeyCode()){
case KeyEvent.VK_LEFT:
left = true;
break;
case KeyEvent.VK_UP:
up = true;
break;
case KeyEvent.VK_RIGHT:
right = true;
break;
case KeyEvent.VK_DOWN:
down = true;
break;
/*因为键的标号不好记,KeyEvent给每个键提供了一个常量
是一个十六进制数
赋值给了VK_方向键
*/
}
}
方法二:
/*根据流程控制有了增加方向还要有相应的减方向*/
/*
写一个方法,取消方向的
*/
public void minusDirection(KeyEvent e){
switch (e.getKeyCode()){
case KeyEvent.VK_LEFT:
left = false;
break;
case KeyEvent.VK_UP:
up = false;
break;
case KeyEvent.VK_RIGHT:
right = false;
break;
case KeyEvent.VK_DOWN:
down = false;
break;
/*
代码几乎一致,只是把方向进行了取消
*/
}
}
使用方法:
/*
给飞机增加几个新的变量
代表飞机的方向
设置飞机的速度,继承、重写
*/
int speed = 30;
boolean left,right,up,down;
/*重写父类方法*/
/*
因为这个属性用了private修饰符,所以不能直接重写
*/