13.5-全栈Java笔记:打飞机游戏实战项目|KeyEvent|Plane|live
来源:互联网 发布:mysql学生管理系统 编辑:程序博客网 时间:2024/06/07 12:02
飞机类设计
飞机是我们游戏中的主物体,需要由玩家直接控制,手段有:键盘、鼠标、触摸屏等等。无论是什么硬件,本质上都是玩家通过硬件改变游戏物体的坐标,从而实现多种多样的效果。
本节中,我们重点使用键盘进行交互。大家学会了使用键盘操控游戏物体,通过鼠标或其他,我们只需要通过相关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类:增加操控功能
package cn.sxt.game;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)交互,可以直接调用外部类的属性和方法。
【示例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(new KeyMonitor());//增加键盘的监听
至此,我们就实现了“四个方向”灵活移动飞机的功能!让我们终于可以和游戏物体直接互动了,大家一定要试试哦。
「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。
笔记包含从浅入深的六大部分:
A-Java入门阶段
B-数据库从入门到精通
C-手刃移动前端和Web前端
D-J2EE从了解到实战
E-Java高级框架精解
F-Linux和Hadoop
- 13.5-全栈Java笔记:打飞机游戏实战项目|KeyEvent|Plane|live
- 13.4-全栈Java笔记:打飞机游戏实战项目|offScreenImage|GameObject|Plane
- 13.7-全栈Java笔记:打飞机游戏实战项目|Rectangle|intersects|Plane
- 13.8-全栈Java笔记:打飞机游戏实战项目|Explode|MyGameFrame|Plane
- 13.9-全栈Java笔记:打飞机游戏实战项目|Time|Plane|其他案例展示
- 13.1-全栈Java笔记:打飞机游戏实战项目|AWT|MyGameFrame
- 13.2-全栈Java笔记:打飞机游戏实战项目|Graphics|ImageIO|GameUtil
- 13.3-全栈Java笔记:打飞机游戏实战项目|PaintThread|launchFrame
- 13.6-全栈Java笔记:打飞机游戏实战项目|Shell|speed|launchFrame
- 【Java小项目】打飞机
- android 游戏 实战打飞机游戏 菜单页面(1)
- java打飞机游戏完整代码
- java项目实战——Java打飞机小游戏(附完整源码)
- java飞机游戏小项目
- C#打飞机游戏
- 人工智能--打飞机游戏
- cocos2d-x SpaceFighting类似打飞机游戏小项目
- cocos2dx打飞机项目笔记一:项目结构介绍
- 序列化,反序列化,可变数组,反射,注解 元注解---了解
- 指数循环节 uva 10692
- 【Apache Thrift】Thrift的使用和编译(二)
- [PKU暑课笔记] 动态规划 POJ1163数字三角形
- UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式
- 13.5-全栈Java笔记:打飞机游戏实战项目|KeyEvent|Plane|live
- 文献免费下载网站 SCI-HUB
- HDU5009西安网赛2014
- Java--面向对象基础
- ASP.NET Web Pages – WebMail 帮助器
- Java并发Lock接口
- ajax技术详解基础部分(一)
- Windows控制台cmd常用命令摘录
- SQL连表查询