(官网: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版权所有,如需转载,注明出处)

9.2.2、Libgdx的输入处理之事件处理的更多相关文章

  1. 9.2.1、Libgdx的输入处理之轮询

    (官网:www.libgdx.cn) 轮询是检测输入设备的当前状态,比如特定的按键按下,屏幕第一个手指的位置等等.这是一个快速简单的处理用户输入的方式,并且应用到很多的游戏中. 注意:如果你处理轮询, ...

  2. 9.2、Libgdx的输入处理之鼠标、触摸和键盘

    (官网:www.libgdx.cn) Libgdx支持的最主要的设备是desktop或浏览器的鼠标支持,Android的触摸屏支持和键盘的支持.我们接下来了解一下. 键盘 用户按下或释放一个按键生成了 ...

  3. 9、Libgdx的输入处理

    (官网:www.libgdx.cn) 不同的平台有着不同的输入方式.桌面用户可以通过键盘和鼠标与应用进行交互,基于浏览器的游戏也是这样.在Android中,鼠标被触摸屏所替代,通常没有实体键盘.And ...

  4. 9.1、Libgdx的输入处理的配置和查询

    (官网:www.libgdx.cn) 有时判断是否支持输入设备是必要的.通常你的游戏不需要支持所有的输入设备.比如你可能不需要加速度计或者罗盘.这时我们需要禁用这些设备保持电量.接下来将教你怎样做. ...

  5. Linux 输入子系统

    Technorati 标签: Kernel 输入子系统 Input      在Linux中,输入设备(如按键.键盘.触摸屏.鼠标等)是典型的字符设备,其一般的工作机理,是底层在按键.触摸时,触发一个 ...

  6. Linux输入子系统(一) _驱动编码

    输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主设备号13,同时输入子系 ...

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

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

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

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

  9. Linux input子系统编程、分析与模板

    输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主设备号13,同时输入子系 ...

随机推荐

  1. Oracle中建库时报Exception in thread main

    Linux操作系统上安装oracle 10g,在启动dbca的时候报 Exception in thread "main" 错误,详细内容如下: [oracle@centos ~] ...

  2. matlab sparse函数和full函数用法详解(转)

    sparse函数 功能:Create sparse matrix-创建稀疏矩阵 用法1:S=sparse(X)--将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩 ...

  3. 验证码识别之w3cschool字符图片验证码(easy级别)

    起因: 最近在练习解析验证码,看到了这个网站的验证码比较简单,于是就拿来解析一下攒攒经验值,并无任何冒犯之意... 验证码所在网页: https://www.w3cschool.cn/checkmph ...

  4. sshpass笔记

    sshpass简介 ssh登录的时候使用的是交互式输入,不能预先在命令行使用参数指定密码,sshpass就是为了解决这个问题的.sshpass提供非交互式输入密码的方式,可以用在shell脚本中自动输 ...

  5. 在Spring Boot框架下使用WebSocket实现聊天功能

    上一篇博客我们介绍了在Spring Boot框架下使用WebSocket实现消息推送,消息推送是一对多,服务器发消息发送给所有的浏览器,这次我们来看看如何使用WebSocket实现消息的一对一发送,模 ...

  6. Swift中String和NSString的一个不同之处

    我们知道在Swift中String和NSString是可以互相转换使用的-额-应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候. 我们 ...

  7. Swift3中方法可变参数语法的一些改变

    我们知道在Swift2中,默认情况下方法的参数是let值,也就是不可改变的. 不过我们可以在参数前添加var关键字改变其不变性: func foo(var i:Int){ i += 1 print(i ...

  8. Spark核心类:弹性分布式数据集RDD及其转换和操作pyspark.RDD

    http://blog.csdn.net/pipisorry/article/details/53257188 弹性分布式数据集RDD(Resilient Distributed Dataset) 术 ...

  9. Android简易实战教程--第三十四话《 自定义SeekBar以及里面的一些小知识》

    转载本专栏文章,请注明出处尊重原创:博客地址http://blog.csdn.net/qq_32059827/article/details/52849676:小杨的博客 许多应用可能需要加入进度,例 ...

  10. [tornado]使用webscoket的使用总是403错误

    使用的tornado版本为4.0+ 后台: PS D:\CodeHouse\tornado\websocket> python .\ws_app.py WARNING:tornado.acces ...