1.修改keyPressed方法,在keyPressed新增switch判断当按下A键的时候,方块向左移动十个像素当按下W的时候,方块向上移动十个像素
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT:
x -= 10;
break;
case KeyEvent.VK_UP:
y -= 10;
break;
case KeyEvent.VK_RIGHT:
x += 10;
break;
case KeyEvent.VK_DOWN:
y += 10;
break;
default:
break;
}
}
但是现在坦克还只能上下左右走,当我们同时按时WD的时候,它会先向上或者向右走
要优化代码可以先用四个键的组合状态来确定坦克的方向确定方向后我们根据方向来处理坦克的坐标值
2.定义四个方向值数据
boolean bL = false;
boolean bU = false;
boolean bR = false;
boolean bD = false;
3.修改keyPressed方法,键盘按键被按下时方向做出改变
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT:
bL = true;
break;
case KeyEvent.VK_UP:
bU = true;
break;
case KeyEvent.VK_RIGHT:
bR = true;
break;
case KeyEvent.VK_DOWN:
bD = true;
break;
default:
break;
}
}
3.因为键盘按下时状态设置为true了(状态设置为true表示为按下,false表示没有按下),所以我们键盘抬起的时候状态要设置为false恢复为没有按下的状态,修改keyReleased方法
@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT:
bL = false;
break;
case KeyEvent.VK_UP:
bU = false;
break;
case KeyEvent.VK_RIGHT:
bR = false;
break;
case KeyEvent.VK_DOWN:
bD = false;
break;
default:
break;
}
}
布置作业:
根据四个boolean值,计算坦克方向,根据坦克方向和速度,自动移动位置。(假设坦克不能停)