13.5-全栈Java笔记:打飞机游戏实战项目|KeyEvent

作者: 全栈JAVA笔记 | 来源:发表于2017-07-31 16:18 被阅读75次

    飞机类设计

    飞机是我们游戏中的主物体,需要由玩家直接控制,手段有:键盘、鼠标、触摸屏等等。无论是什么硬件,本质上都是玩家通过硬件改变游戏物体的坐标,从而实现多种多样的效果。

    本节中,我们重点使用键盘进行交互。大家学会了使用键盘操控游戏物体,通过鼠标或其他,我们只需要通过相关API的帮助即可轻松实现。

    键盘控制原理

    键盘和程序交互时,每次按下键、松开键都会触发相应的键盘事件,事件的信息都封装到了KeyEvent对象中。

    为了识别按下的键是哪个键, 系统对键盘所有按键做了编号,每个按键都对应相应的数字。 比如:回车键对应数字10,空格键对应数字32等。这些编号,我们都可以通过KeyEvent对象来查询,KeyEvent.VK_ENTER 实际就是存储了数字10。

    本游戏中,我们通过“上下左右”键来控制飞机的移动,因此我们可以设定四个布尔类型的变量表示四个基本方向。

    boolean left,up,right,down;

    当按下左键时,left=true;当松开左键时,left=false;

    程序根据四个方向的状态,进行移动,比如:left=true,即飞机向左移动,那么只需x坐标做减法即可。 其他方向同理。

    if (left) {

    x -= speed;

    }

    飞机类:增加操控功能

    我们为飞机类增加了4个方向,用来控制飞机的移动。同时,为了后续需求,也增加了live变量,它表示飞机是“活的”还是“死的”,“活的”我们就画出飞机,“死的”就不画飞机了。

    【示例1】Plane类:增加操控功能

    packagecn.sxt.game;

    importjava.awt.Graphics;

    importjava.awt.Image;

    importjava.awt.event.KeyEvent;

    publicclassPlaneextendsGameObject {

    boolean left, up, right, down;

    boolean live = true;

    //按下上下左右键,则改变方向值。

    // 比如:按下上键,则e.getKeyCode()的值就是VK_UP,那么置:up=true;

    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;

    default:

    break;

    }

    }

    case KeyEvent.VK_UP:

    up = false;

    break;

    case KeyEvent.VK_RIGHT:

    right = false;

    break;

    case KeyEvent.VK_DOWN:

    down = false;

    break;

    default:

    break;

    }

    }

    @Override

    public void drawMySelf(Graphics g) {

    super.drawMySelf(g);

    // 根据方向,计算飞机新的坐标

    if (left) {

    x -= speed;

    }

    if (right) {

    x += speed;

    }

    if (up) {

    y -= speed;

    }

    if (down) {

    y += speed;

    }

    }

    public Plane(Image img, double x, double y, int speed) {

    super(img, x, y);

    this.speed = speed;

    }

    }

    主窗口类:增加键盘监听

    我们通过定义KeyMonitor内部类来实现键盘监听功能。定义成内部类是为了方便和外部窗口类(MyGameFrame)交互,可以直接调用外部类的属性和方法。

    【示例2】MyGameFrame类:增加键盘监听功能

    //定义为内部类,可以方便的使用外部类的普通属性

    class KeyMonitor extends KeyAdapter {

    @Override

    public void keyPressed(KeyEvent e) {

    plane.addDirection(e);

    }

    @Override

    public void keyReleased(KeyEvent e) {

    plane.minusDirection(e);

    }

    }

    我们在launchFrame()方法中,启动键盘监听:

    【示例3】启动键盘监听

    addKeyListener(newKeyMonitor());//增加键盘的监听

    至此,我们就实现了“四个方向”灵活移动飞机的功能!让我们终于可以和游戏物体直接互动了,大家一定要试试哦。


    「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

    笔记包含从浅入深的六大部分:

    A-Java入门阶段

    B-数据库从入门到精通

    C-手刃移动前端和Web前端

    D-J2EE从了解到实战

    E-Java高级框架精解

    F-Linux和Hadoop

    相关文章

      网友评论

        本文标题:13.5-全栈Java笔记:打飞机游戏实战项目|KeyEvent

        本文链接:https://www.haomeiwen.com/subject/cwjrlxtx.html