根据具体按键调整坦克位置,持有对方引用

文章介绍了如何修改游戏中的keyPressed方法以实现坦克根据A、W、S、D键的组合移动。通过定义四个布尔变量表示上下左右的方向状态,在键按下和释放时更新这些状态。最终,根据这些状态计算坦克的方向并自动调整其位置,确保能处理多个键同时按下的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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值,计算坦克方向,根据坦克方向和速度,自动移动位置。(假设坦克不能停)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值