45fan.com - qg777钱柜

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:java游戏开发杂谈 - 事件处理

java游戏开发杂谈 - 事件处理

2019-04-14 06:28:49 来源:www.45fan.com 【
大家都知道,游戏需要跟玩家交互,需要接收玩家的鼠标、键盘发出的命令,比如在地图上点击一下,人物就自动寻路走过去;键盘上按下某个键,就弹出一个背包界面。 这些逻辑是怎么处理的呢? 大家先不用深究太详细的,只需要知道,当我们按下键盘时,操作系统会接收到指令,然后把指令传递给java虚拟机,java虚拟机再把指令转发给当前的游戏程序。 java定义了一些类来封装事件,比如KeyEvent对应按键事件,按下键盘,就会产生一个KeyEvent对象; 还有另外的一些接口,用来监听处理事件,比如KeyListener用来监听按键事件,并进行处理。 接下来我们实现一个例子,是在界面上画一个方块,当按下不同方向键时,方块往不同的方向移动。同时,限制方块不能超出活动区域。 先看下完成后的界面图: java游戏开发杂谈 - 事件处理 下面贴出这个例子的所有代码: package game3; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JPanel; /** * java游戏开发杂谈 * ---demo3:事件处理 * * @author 台哥 * @date 2019-04-09 */ public class GamePanel extends JPanel implements KeyListener{ /** 屏幕的宽和高 */ private int width,height; /**小方块的初始位置*/ private int x = 240, y = 160; public GamePanel(int width, int height) { this.width = width; this.height = height; this.setSize(width, height); //设置当前画布可以获得焦点。 this.setFocusable(true); //设置自己为自己的按键事件监听器 this.addKeyListener(this); } /** * 覆盖paintComponent()方法 * 参数中的Graphics是画笔,使用它可以绘制出字符串、直线、矩形、圆、图片等等。 */ public void paintComponent(Graphics g) { super.paintComponent(g); //画绿色背景 g.setColor(new Color(0x839156)); g.fillRect(0, 0, width, height); //画绿色背景 g.setColor(new Color(0x839156)); g.fillRect(0, 0, width, height); g.setColor(Color.black); //画一个矩形活动区域 g.drawRect(160, 80, 200, 200); //画一个小方块 g.fillRect(x, y, 40, 40); } /** * 当键盘上的键被按下,程序会调用这个方法,来处理这个按下事件 * * 通过键盘上的四个方向键来控制小方块的移动 */ @Override public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); //根据keyCode能知道按下的是哪个键 switch(keyCode) { case KeyEvent.VK_LEFT: if(x > 160){ //控制使得方块不能超出活动区域外 x = x - 1; } this.repaint(); //刷新一下画布,就能看到小方块位置发生了变化。 break; case KeyEvent.VK_RIGHT: if(x < 320){ //矩形活动区域最左边的横坐标为160,宽为200,所以矩形的最右边的坐标为360. 小方块宽度为40. 360 - 40 = 320. x = x + 1; } this.repaint(); break; case KeyEvent.VK_UP: if(y > 80){ y = y - 1; } this.repaint(); break; case KeyEvent.VK_DOWN: if(y < 240){ y = y + 1; } this.repaint(); break; } } @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } }   package game3; import javax.swing.JFrame; /** * java游戏开发杂谈 * ---demo3:事件处理 * * @author 台哥 * @date 2019-04-09 */ public class GameFrame extends JFrame{ private int width = 600, height = 400; public GameFrame() { //设置窗体标题 this.setTitle("java游戏开发杂谈-台哥出品"); //创建一个画布 GamePanel panel = new GamePanel(width, height); //把画布加入到窗体中 getContentPane().add(panel, "Center"); //设置窗体大小 this.setSize(width, height); //设置能否调整窗体大小 this.setResizable(false); //这句会使得在屏幕上居中显示 this.setLocationRelativeTo(null); //当关闭窗体的时候退出程序 this.setDefaultCloseOperation(EXIT_ON_CLOSE); //把窗体显示出来 this.setVisible(true); } /** * 主方法 */ public static void main(String[] args) { GameFrame frame = new GameFrame(); } }   眼过千遍,不如手过一遍。学习编程的诀窍,就是亲身实践,多加练习。书本上的理论知识,学个大概,就开始动手写代码练习,遇到困难了,再翻书解决,如此反复,不断的用理论来指导实践,用实践来验证理论。   未完待续,java游戏开发杂谈,台哥在工作之余抽空写的专栏,希望能给大家一点帮助。 java游戏开发杂谈 - 事件处理  
 
 

本文地址:http://www.45fan.com/dnjc/100368.html
Tags: Java 开发 游戏
编辑:qg777钱柜
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部