(官网:www.libgdx.cn)

事件处理可以更加准确的获取用户的输入。事件处理提供了一种可以通过用户接口进行交互的方法。比如按下、释放一个按钮。

输入处理

事件处理通过观察者模式来完成。首先,需要实现InputProcessor接口:

public class MyInputProcessor implements InputProcessor {
@Override
public boolean keyDown (int keycode) {
return false;
}
@Override
public boolean keyUp (int keycode) {
return false;
}
@Override
public boolean keyTyped (char character) {
return false;
}
@Override
public boolean touchDown (int x, int y, int pointer, int button) {
return false;
}
@Override
public boolean touchUp (int x, int y, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged (int x, int y, int pointer) {
return false;
}
@Override
public boolean mouseMoved (int x, int y) {
return false;
}
@Override
public boolean scrolled (int amount) {
return false;
}
}

前三个方法允许你监听键盘事件:

  • keyDown():当一个按键按下时触发。返回key code,查阅点击

  • keyUp():当一个按键释放时触发。返回key code。

  • keyTyped():当一个Unicode字符通过键盘输入获得时生成。

接下来的三个方法报告鼠标或触摸事件:

  • touchDown():当手指按到屏幕上时或鼠标按下时触发该事件。报告坐标、指针索引和鼠标按键(触摸操作默认左键)。

  • touchUp():当手机从屏幕释放或者鼠标释放时调用。报告最后的坐标、指针索引和鼠标按键(触摸默认左键)。

  • touchDragged():当手指在屏幕上拖动或鼠标在屏幕上拖动时触发该事件。返回坐标和指针索引。鼠标按键将不会返回。

  • mouseMoved():当鼠标在屏幕上移动并没有按键按下时触发。这个方法仅仅适用于桌面环境。

  • scrolled():鼠标滑轮滚动时触发。返回1或-1。不能在触摸屏中触发。

每个方法返回一个布尔类型。我将在之后解释原因。

一旦你自己实现InputProcessor接口,你必须告诉Libgdx:

MyInputProcessor inputProcessor = new MyInputProcessor();
Gdx.input.setInputProcessor(inputProcessor);

这样的话,所有的输入事件都会放到MyInputProcessor实例中。在ApplicationListener.render()之前调用。

InputAdapter

InputAdapter实现了InputProcessor接口,并在每个方法中返回false。你可以对InputAdapter进行扩展。这样,你就可以实现你需要的方法。你同样可以使用一个匿名类。

Gdx.input.setInputProcessor(new InputAdapter () {
public boolean touchDown (int x, int y, int pointer, int button) {
// 你的代码
return true;
}

public boolean touchUp (int x, int y, int pointer, int button) {
// 你的代码
return true;
}
});

InputMultiplexer

有时,你需要控制InputProcessor。比如应用UI线程优先,输入事件处理次之。你可以通过InputMultiplexer类来实现:

InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(new MyUiInputProcessor());
multiplexer.addProcessor(new MyGameInputProcessor());
Gdx.input.setInputProcessor(multiplexer);

InputMultiplexer将会处理第一个添加的InputProcessor的所有的新的事件。如果这个InputProcessor返回false。将会处理下一个InputProcessor。

持续输入处理实例

如果你向通过Input Processor移动一个actor,你需要注意的是之后在按下后才会处理,要想持续处理输入,或者移动精灵,你可以添加一个flag到你的actor中。

public class Bob
{
boolean leftMove;
boolean rightMove;
...
updateMotion()
{
if (leftMove)
{
x -= 5 * Gdx.graphics.getDeltaTime();
}
if (rightMove)
{
x += 5 * Gdx.graphics.getDeltaTime();
}
}
...
public void setLeftMove(boolean t)
{
if(rightMove && t) rightMove = false;
leftMove = t;
}
public void setRightMove(boolean t)
{
if(leftMove && t) leftMove = false;
rightMove = t;
}

接下来,如下处理:

...
@Override
public boolean keyDown(int keycode)
{
switch (keycode)
{
case Keys.LEFT:
bob.setLeftMove(true);
break;
case Keys.RIGHT:
bob.setRightMove(true);
break;
}
return true;
}
@Override
public boolean keyUp(int keycode)
{
switch (keycode)
{
case Keys.LEFT:
bob.setLeftMove(false);
break;
case Keys.RIGHT:
bob.setRightMove(false);
break;
}
return true;
}

(www.libgdx.cn版权所有,如需转载,注明出处)

转载于:https://www.cnblogs.com/hainange/p/6153497.html

9.2.2、Libgdx的输入处理之事件处理相关推荐

  1. 卸载重新安装mysql会怎样_关于MySQL卸载重新安装的问题

    大体上一共分为3步,那么我们就美其名曰--三步走搞定MySQL安装 为什么说3步呢,如果你非要计较说我一次就重新安装成功了,就当我没说,这些是说给那些经常安装失败的同学看的! 切记,如若不想再以后My ...

  2. Linux 输入子系统原理理解(原创)

    linux    输入子系统原理理解(原创) 以前学了单独的按键设备驱动以及鼠标驱动,实际上,在linux中实现这些设备驱动,有一种更为推荐的方法,就是input输入子系统.平常我们的按键,触摸屏,鼠 ...

  3. linux input输入子系统分析《四》:input子系统整体流程全面分析

    1      input输入子系统整体流程 本节分析input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层.由于上节代码讲解了设备 ...

  4. linux input输入子系统分析《一》:初识input输入子系统

    主要讲述本人在学习Linux内核input子系统的全部过程,如有分析不当,多谢指正.以下交流方式,文章欢迎转载,保留联系信息,以便交流. 邮箱:eabi010@gmail.com 主页:www.iel ...

  5. 《Linux 驱动:输入子系统》

    前言 输入子系统作为一个模块存在,向上,为用户层提供调用接口:向下,为驱动层程序提供统一的注册接口.这样,就能够使输入设备的事件通过输入子系统发送给用户层应用程序,用户层应用程序也可以通过输入子系统通 ...

  6. linux查看磁盘分区恢复磁盘,在Linux,误删磁盘分区怎么恢复呢【转】

    在我们运维工作中,频繁的操作,可能命令写入错误,造成磁盘分区的删除,那么应该怎么办呢?怎么恢复磁盘分区呢? 一不小心删除了磁盘分区.如下图,删除了sda磁盘的第一个分区,为系统boot分区,系统如果重 ...

  7. driver: Linux设备模型之input子系统详解

    本节从整体上讲解了输入子系统的框架结构.有助于读者从整体上认识linux的输入子系统.在陷入代码分析的过程中,通过本节的知识能够找准方向,明白原理. 本节重点: 输入子系统的框架结构 各层对应内核中的 ...

  8. 为什么setTimeout(fn,0)有时有用?

    我最近遇到了一个令人讨厌的错误,该错误代码是通过JavaScript动态加载<select> . 动态加载的<select>具有预先选择的值. 在IE6中,我们已经有代码来修复 ...

  9. [转]深度学习在目标跟踪中的应用

    原文链接:https://zhuanlan.zhihu.com/p/22334661 开始本文之前,我们首先看上方给出的3张图片,它们分别是同一个视频的第1,40,80帧.在第1帧给出一个跑步者的边框 ...

最新文章

  1. 用过美德乐吸奶器的宝妈们感觉比国产吸奶器怎么样啊?
  2. 电脑桌面锁屏怎么设置_华为手机总是莫名多出照片?这两个设置不关闭,内存再大也不够用...
  3. 甜、酸、苦、辣、咸与健康
  4. linux 重复执行脚本,防止shell脚本重复执行的代码
  5. android内存优化发展——使用软引用
  6. ruby+selenium-webdriver一步一步完成自动化测试(6)—-生成测试报告
  7. linux清理缓存_[ERROR] Linux 的 No space left on device(磁盘空间不足)
  8. python冰雪奇缘使用教程_99 行 Python 代码实现《冰雪奇缘》特效?网友:大神碉堡!...
  9. Vivado 2019.1下载与安装
  10. 谷歌浏览器打不开网页
  11. 计算机桌面调音量的图标不见了,电脑调节音量的小喇叭不见了?教你3招,轻松解决!...
  12. Linux篇之局域网文件共享服务samba的搭建和使用
  13. php里用钢笔画曲线,ps钢笔工具组怎么用 ps钢笔工具使用方法
  14. 计蒜客T1003输出字符菱形
  15. [刷题]2017百度之星资格赛 - 度度熊与邪恶大魔王
  16. Python print 玩转点阵字
  17. 围住一只猫猫需要几步?【多猫预警】
  18. 改408!985南京大学计算机系考研!
  19. PHP网站怎么放谷歌广告,如何在wordpress中加入google adsense广告(百度联盟)
  20. 特斯拉把机枪送给了猴子

热门文章

  1. 3.15 Ext JS 之 Tooltip 的基本使用
  2. 第2章[2.6] 组件与容器的选择与开发
  3. java代码操作注册表,java操作注册表范例代码
  4. java去掉mongodb日志_JAVA开发 Mongodb3.0以上 去掉控制台DEBUG信息
  5. 服务器 linux mysql5.7修改密码,navicat远程登录不了
  6. Vue调试工具 vue-devtools的安装
  7. win10启动项_win10 -- 取消不需要的开机启动项和服务项加快win10系统开机速度
  8. kettle的变量空间接口VariableSpace实现与委托模式
  9. nginx ---- nginx服务器版本升级和新增模块
  10. java内部类的作用_java 内部类的好处和缺点(上)