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