4.14Java游戏小项目之键盘控制原理

4.14Java游戏小项目之键盘控制原理

本质理解

键盘和程序交互原理:

  • 每次按下键、松开键触发响应的键盘事件。

  • 按下和松开用true和false表示

  • 将事件封装到KeyEvent对象中

  • 识别按下哪个键就是对键盘进行编号

    • 编号通过KeyEvent对象来查询

  • 本项目有四个方向,设置四个基本方向,按下=true,松开=false,左右移动只需要对其进行加、减即可

键盘监听是一个内部类

示例:

    /*
   定义一个键盘监听的内部类
   KeyMonitor继承于KeyAdapter
    */
   class KeyMonitor extends KeyAdapter{

       /*重写父类的两个方法,按下、抬起*/

       /*重写按下键方法*/
       //keyEvent是一个对象,包含了所有按下键的信息
       @Override
       public void keyPressed(KeyEvent e){
           System.out.println("按下:" + e.getKeyCode());
      }
       
       /*重写抬起键方法*/
       @Override
       public void keyReleased(KeyEvent e){
           System.out.println("抬起:" + e.getKeyCode());
      }

  }



      addKeyListener(new KeyMonitor()); //给窗口增加键盘监听

在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修饰符,所以不能直接重写
    */
   @Override
   public void drawSelf(Graphics g){
       g.drawImage(img,(int)x,(int)y,null);

       /*根据方向判断方向的+、-*/
       if (left = true){
           x -= speed; //speed n.速度
      }

       if (right = true){
           x += speed;
      }

       if (up = true){
           y -= speed; //y -= speed ---> y = y - speed
      }

       if (down = true){
           y += speed;
      }
  }

 

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14659755.html