9.2.2、Libgdx的输入处理之事件处理

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

时间: 2024-10-24 13:02:49

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

9、Libgdx的输入处理

(官网:www.libgdx.cn) 不同的平台有着不同的输入方式.桌面用户可以通过键盘和鼠标与应用进行交互,基于浏览器的游戏也是这样.在Android中,鼠标被触摸屏所替代,通常没有实体键盘.Android设备有加速度计和罗盘等传感器. Libgdx抽象了所有的这些输入设备.鼠标和触摸屏被视为同一类型,并且支持多点触摸. 取决于不同的输入设备,可以使用轮询的方式来监听状态,或者通过注册一个监听. 所有的输入设备通过Input模块访问: // 判断键盘A是否被按下. boolean isPres

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

(官网:www.libgdx.cn) Libgdx支持的最主要的设备是desktop或浏览器的鼠标支持,Android的触摸屏支持和键盘的支持.我们接下来了解一下. 键盘 用户按下或释放一个按键生成了相应的事件.每个事件包含了一个 key-code来识别是哪个按键按下或释放.这些key-code在不同的平台是不同的.Libgdx要做的就是隐藏不同系统之前的差别.可以查阅Keys类.你可以通过轮询来判断是哪个键被按下. 单独的key-code不能告诉我们用户输入了什么.这通常是组合键造成这种困扰,

9.2.1、Libgdx的输入处理之轮询

(官网:www.libgdx.cn) 轮询是检测输入设备的当前状态,比如特定的按键按下,屏幕第一个手指的位置等等.这是一个快速简单的处理用户输入的方式,并且应用到很多的游戏中. 注意:如果你处理轮询,可能会丢失事件.如果最好采用事件处理. 轮询键盘 轮询键盘输入可以通过简单的一行代码实现: boolean isAPressed = Gdx.input.isKeyPressed(Keys.A); 传递给方法的值就是我们上一篇提到的Key Code,可以查阅上一篇文章查看相关键值. 轮询触摸或鼠标

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

(官网:www.libgdx.cn) 有时判断是否支持输入设备是必要的.通常你的游戏不需要支持所有的输入设备.比如你可能不需要加速度计或者罗盘.这时我们需要禁用这些设备保持电量.接下来将教你怎样做. 禁用加速度计和罗盘(Android) 在执行AndroidApplication.initialize()方法之前,可以只用AndroidApplicationConfiguration类来设置一些参数,包括配置输入设备. 假设我们的游戏不需要加速度计和罗盘,我们可以禁用这些设备: public c

LUA输入控件事件处理

原文地址:https://www.cnblogs.com/linhongquan/p/8149662.html

Linux 输入子系统

Technorati 标签: Kernel 输入子系统 Input      在Linux中,输入设备(如按键.键盘.触摸屏.鼠标等)是典型的字符设备,其一般的工作机理,是底层在按键.触摸时,触发一个中断,或者驱动通过定时器定时查询,通过这两种方式通知CPU,CPU然后通过SPI.I2C或I/O接口读取键值.坐标等数据,放入缓冲区,字符设备驱动管理该缓冲区,向上提供read接口供应用程序使用.      在上述的工作流程中,只有终端.读取数值是根具体硬件设备相关,而输入事件的缓冲区管理以及字符设

Linux输入子系统

在Linux中,按键.触摸屏.鼠标等等输入设备都可以依靠输入子系统提供的接口函数来实现他们的设备驱动,在输入子系统中,系统已经完成了这些输入设备的共性,所以根据子系统提供的接口,只需要完成各自的独特性即可完成一个输入设备的设备驱动. Linux中,输入子系统由设备驱动层.核心层.事件处理层这三层组成.设备驱动层讲底层输入设备的响应转化为标准的输入事件,事件处理层就为应用程序提供统一的设备访问接口来跟底层交互数据,核心层则是连接驱动层和事件处理层的桥梁. 在输入子系统中重要的结构体就是input_

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

linux    输入子系统原理理解(原创) 以前学了单独的按键设备驱动以及鼠标驱动,实际上,在linux中实现这些设备驱动,有一种更为推荐的方法,就是input输入子系统.平常我们的按键,触摸屏,鼠标等输入型设备都可以利用input接口来简化驱动程序并实现设备驱动. 输入子系统原理 linux输入子系统的体系结构可以分为三个层面,分别为:驱动层.输入核心层.事件处理层,三个有点类似PHP的MVC模式,意思就是每个层次只是负责单独的一个功能,无需参与其他的功能,有点类似函数的封装,好了,废话不多

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

1      input输入子系统整体流程 本节分析input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层.由于上节代码讲解了设备驱动层的写法,因此在开头部分会从设备驱动层做为线索,分析输入子系统和事件处理层是如何配合的,最后从用户角度出发,从"/dev/input/*"接口如何使用输入子系统提供的服务. 既然需要详细分析,有一个这样的流程图能够帮助我们在被绕进代码的过程中,找到出口,你能够知道你现在位于代码框架的什