JAVA全系列 教程
3762个小节阅读:7092.1k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
我们为飞机类增加了4个方向,用来控制飞机的移动。同时,为了后续需求,也增加了live变量,它表示飞机是“活的”还是“死的”,“活的”我们就画出飞机,“死的”就不画飞机了。
【示例13-15】Plane类:增加操控功能
xxxxxxxxxx
package com.bjsxt.plane;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
public class Plane extends GameObject {
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;
}
}
// 松开上下左右键,则改变方向值。
// 比如:松开上键,则e.getKeyCode()的值就是VK_UP,那么置:up=false;
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;
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)交互,可以直接调用外部类的属性和方法。
【示例13-16】MyGameFrame类:增加键盘监听功能
xxxxxxxxxx
//定义为内部类,可以方便的使用外部类的普通属性
class KeyMonitor extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
plane.addDirection(e);
}
@Override
public void keyReleased(KeyEvent e) {
plane.minusDirection(e);
}
}
我们在launchFrame()
方法中,启动键盘监听:
【示例13-17】启动键盘监听
xxxxxxxxxx
addKeyListener(new KeyMonitor());//增加键盘的监听
至此,我们就实现了“四个方向”灵活移动飞机的功能!让我们终于可以和游戏物体直接互动了,大家一定要试试哦。