首页 > 代码库 > 9.2.1、Libgdx的输入处理之轮询

9.2.1、Libgdx的输入处理之轮询

(官网:www.libgdx.cn)

轮询是检测输入设备的当前状态,比如特定的按键按下,屏幕第一个手指的位置等等。这是一个快速简单的处理用户输入的方式,并且应用到很多的游戏中。

注意:如果你处理轮询,可能会丢失事件。如果最好采用事件处理。

轮询键盘

轮询键盘输入可以通过简单的一行代码实现:

boolean isAPressed = Gdx.input.isKeyPressed(Keys.A);

传递给方法的值就是我们上一篇提到的Key Code,可以查阅上一篇文章查看相关键值。

轮询触摸或鼠标

轮询触摸和鼠标输入,这里有一系列的方法。要检测一个或多个点按下(等同鼠标单击),可以使用如下代码:

boolean isTouched = Gdx.input.isTouched();

对于多点触摸来说可以判断某一个触摸点是否释放与否:

// 返回当前是否被触摸
boolean firstFingerTouching = Gdx.input.isTouched(0);
boolean secondFingerTouching = Gdx.input.isTouched(1);
boolean thirdFingerTouching = Gdx.input.isTouched(2);

每个手指在屏幕上按下都会获得一个指针索引。第一个手指获得0,接下来为1等等。如果一个手指离开屏幕。指针索引将被释放。

  • 第一个手指按下> 指针索引为0.

  • 第二个手指按下>指针索引为1

  • 第三个手指按下>指针索引为2

  • 第二个手指释放>指针索引1释放

  • 第一个手指释放>指针索引0释放,现在只有指针索引2可用

  • 另外的一个手指按下>指针索引为0.

在桌面和浏览器中只支持单点,也就是同时只能按下一个“手指”。
如果你想检测用户是否按下和释放某个手指,可以使用如下方法:

// 将返回屏幕刚刚是否被触摸
boolean justTouched = Gdx.input.justTouched();

这可以用于快速检测是否触发触摸操作。比如“点击屏幕继续”。需要注意的是,它是基于轮询,所以结果可能不准确。

获取相关坐标可以使用如下代码:

int firstX = Gdx.input.getX();
int firstY = Gdx.input.getY();
int secondX = Gdx.input.getX(1);
int secondY = Gdx.input.getY(1);

这样就获取了指针索引0(0为默认)的坐标和指针索引1的坐标。

鼠标按钮

在桌面环境下你可以通过如下代码检测鼠标按键是否被按下:

boolean leftPressed = Gdx.input.isButtonPressed(Input.Buttons.LEFT);
boolean rightPressed = Gdx.input.isButtonPressed(Input.Buttons.RIGHT);

需要注意的是,在android中我们仅仅模拟鼠标左键单击。任何触摸事件将视为鼠标单击。触摸屏幕显然没有鼠标左右键的概念。
(www.libgdx.cn版权所有,如需转载,注明出处)

9.2.1、Libgdx的输入处理之轮询