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

简介: (官网:www.libgdx.cn) 事件处理可以更加准确的获取用户的输入。事件处理提供了一种可以通过用户接口进行交互的方法。比如按下、释放一个按钮。

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

目录
相关文章
|
存储 iOS开发 MacOS
iOS小技能: ips 文件的分析
主要分析3块: 1. Triggered by Thread线程的调用栈回溯信息 2. 与架构相关崩溃的线程状态(crashed with ARM Thread State) 3. Binary Images信息
1109 0
iOS小技能: ips 文件的分析
|
Java 开发工具
Idea导出可运行jar包及运行方法
Idea导出可运行jar包及运行方法
Idea导出可运行jar包及运行方法
|
Java 数据安全/隐私保护
开源一个基于SpringBoot的慈善公益平台(二)
开源一个基于SpringBoot的慈善公益平台
240 0
|
机器学习/深度学习 存储 算法
基于SFLA算法的神经网络优化matlab仿真
**摘要:** 使用MATLAB2022a,基于SFLA算法优化神经网络,降低训练误差。程序创建12个神经元的前馈网络,训练后计算性能。SFLA算法寻找最优权重和偏置,更新网络并展示训练与测试集的预测效果,以及误差对比。SFLA融合蛙跳与遗传算法,通过迭代和局部全局搜索改善网络性能。通过调整算法参数和与其他优化算法结合,可进一步提升模型预测精度。
|
XML 存储 安全
探索 doc 和 docx 文件格式的区别
探索 doc 和 docx 文件格式的区别
771 3
|
数据可视化 项目管理
Scrum与Kanban项目管理实践
【5月更文挑战第8天】本文探讨了Scrum和Kanban两种敏捷项目管理方法的实践应用。Scrum侧重迭代开发和团队协作,通过短期Sprint实现增量交付,而Kanban注重工作流程可视化和持续改进,通过看板管理和限制在制品优化效率。两者各有优势,可根据项目需求灵活选用或结合使用。理解并运用这些方法能提高项目成功率并适应变化的环境。
|
缓存 Java 应用服务中间件
苍穹外卖知识点总结(springboot)
苍穹外卖知识点总结(springboot)
3037 0
【数据结构】堆的向上调整和向下调整以及相关方法
文章目录 一、堆的概念 二、堆的性质 三、堆的分类 1.大根堆 2.小根堆 四、说明 五、堆的结构 🚩六、堆的向上调整 1.图示 2.代码实现 ⌚️3.时间复杂度分析
|
安全 程序员 Shell
反编译之脱去乐固加固的壳
反编译之脱去乐固加固的壳
|
区块链 C++
upx加壳过360
upx加壳过360
1063 0