第八章 Libgdx输入处理(3)输入设备



Android游戏开发群:290051794
Libgdx游戏开发框架交流群:261954621 

 

 

简介

在Android中,Libgdx支持的主要输入设备为触摸屏和键盘。由于现在大部分Android设备不再配备键盘,所以这里我们只讨论触摸屏。

触摸操作

触摸输入机制可以确定你的点击的屏幕的位置,屏幕的左上角为原点。X轴指向右边,y轴指向屏幕下边。

触摸没有按钮的概念。依靠硬件的支持可以同时响应多个触摸操作。第一代的Android手机仅仅支持单点触摸。从Motorola Droid开始,多点触摸成为Android手机的标准特性。

需要注意的是,触摸操作在不同的设备上实现的方式不同。当触摸事件激活时,这会影响指针索引的指定和释放。所以,要尽可能多的在不同的设备上测试你的控制方案。

输入轮询

轮询是指检查当前输入设备的状态,例如,当你的按下特定的按键时,确定你的第一个手指在屏幕上的位置。

警告:如果你过分依赖轮询,你可能会错过事件。

触摸屏轮询

检测手指是否触摸了屏幕,可以用以下语句:

boolean isTouched = Gdx.input.isTouched();

对于多点触摸来说,可以使用以下语句:

boolean firstFingerTouching = Gdx.input.isTouched(0);

boolean secondFingerTouching = Gdx.input.isTouched(1);

boolean thirdFingerTouching = Gdx.input.isTouched(2);

每个手指的触摸操作会获得一个指针索引。第一个手指按下获取index0,下一个为index1等等。如果一个手指从屏幕上释放,再次触摸,其他的手指仍然在屏幕上,那么第一个指针索引将被释放。

 

第一个手指按下 -> 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的触摸坐标,坐标是基于屏幕的。原点在屏幕左上角。

事件处理

事件处理允许你获取更多的细节。事件处理提供了一种实现与用户接口交互的方法,但有一定的输入顺序。比如,按下和释放构成一个点击事件。这样的交互很难用轮询实现。

输入处理

首先要实现一个侦听器接口:

public class MyInputProcessor implements InputProcessor {

   @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;

   }

}

TouchDown():当手指按下屏幕时触发,返回坐标和指针索引。

touchUp():当手指释放屏幕时触发,返回坐标和指针索引。

touchDragged():当手指在屏幕拖动时触发,返回坐标和指针索引。

每个方法会返回一个布尔值。

必须通知libgdx以便它可以处理输入事件。

MyInputProcessor inputProcessor = new MyInputProcessor();

Gdx.input.setInputProcessor(inputProcessor);

这时,所有的输入事件都在MyInputProcessor()的实例处理。

在rendering线程调用ApplicationListener.render()之前处理事件。

注意:只有很少的Android设备具有物理键盘,所以,上面的返回值可能为false。

作者:宋志辉 
出处:http://blog.csdn.net/song19891121
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
支持: 新浪微博 腾讯微博

 

时间: 2024-09-22 17:38:05

第八章 Libgdx输入处理(3)输入设备的相关文章

第八章 Libgdx输入处理(1)

Android游戏开发群:290051794Libgdx游戏开发框架交流群:261954621    在Android中,输入设备通常为触摸屏.有的Android通常会有加速度计或罗盘. Libgdx将所有的不同的输入设备抽象化.只不过不同的输入设备或许会有不同的方法. 根据不同的输入设备,可以检测设备的状态,或者注册一个监听器按时间顺序接收输入事件. 所有的输入设备都是通过输入模块实现:  // 检查是否按键A被按下 boolean isPressed = Gdx.input.isKeyPre

第八章 Libgdx输入处理(8)振动器

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   虽然这不是严格的输入设备,只不过是一个外设而已.我们认为它属于输入模型. 振动器允许你震动手机,这通常可以用于游戏控制器中. 在Android中使用振动器需要申请相关权限: android.permission.VIBRATE. 如下: Gdx.input.vibrate(2000); 上句的2000相当于2秒. 更复杂的模式可以通过第二个vibrate()方法实现: Gdx.input.vib

第八章 Libgdx输入处理(2)配置和查询

Android游戏开发群:290051794Libgdx游戏开发框架交流群:261954621    有时需要知道支持什么样的输入设备.当然,你的游戏不必支持所有的输入设备.比如你可能不需要加速度计或罗盘.为了节省电量可以考虑关闭这些输入设备. 禁用加速度计和罗盘 在执行AndroidApplication.initialize()方法之前,可以通过调用AndroidApplicationConfiguration类的两个公用方法进行设置. 假设游戏不需要加速度计和罗盘,如下: public c

第八章 Libgdx输入处理(4)手势捕获

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   触摸屏非常适合手势输入.一个手势可以是通过两个手指来变焦,点击,双击或长按等等. Libgdx提供了GestureDetector类来检测以下动作: 1.  点击:用户触摸屏幕.当一个点击被注册后,手指不要远离初始位置太远. 2.  滑动:用户在屏幕上滑动,并释放. 3.  变焦:用两个手指在屏幕上实现放大缩小. 4.  Pinch:类似于变焦.但有些不同. 5.  一个GestureDetec

第八章 Libgdx输入处理(5)简单文本输入

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   如果应用需要询问用户输入字符串,比如名字或密码,在某种程度上可以使用定制的简单的对话框. 在Android系统中,一个android的标准对话框会打开,并提示用户输入. 为了获取输入或通知,必须继承TextInputListener接口: public class MyTextInputListener implements TextInputListener { @Override publi

第八章 Libgdx输入处理(9)菜单捕获

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   在Android中,当用户按下返回键,这样通常会关闭正在运行的Activity.游戏通常会在退出之前显示一个确认对话框.捕获返回键语句如下: Gdx.input.setCatchBackKey(true); 如果你注册了InputProcessor,你任然可以获取按键事件,但是Android系统不会关闭你的应用. 注意:一般情况下,在Android中点击返回键会关闭当前的Activity.偏离常

第八章 Libgdx输入处理(10)触摸屏

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621     大部分Android设备不具备物理键盘.相反,可以实现软键盘.为了调用软键盘,需要使用以下方法: Gdx.input.setOnscreenKeyboardVisible(true); 一旦设为true,任何按键点击将被当做事件报告给应用.此外,可以检测特定键的状态. 注意:当横屏使用软键盘时,这里有个bug.     作者:宋志辉 出处:http://blog.csdn.net/song1

第八章 Libgdx输入处理(6)加速度计

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   在Android中,加速度计是通过三个坐标确定设备加速度.加速度的变化源于设备的倾斜和方向的改变. 加速度的单位是(m/s2),如果一个轴指向地球的中心,则加速度大约为10 m/s2.如果指向相反地方向,则加速度为-10 m/s2. 在Android,各轴表示如下: 对于手机来说,portrait mode是默认的方向模式. 检测可用性 不同的Android设备具有不同的硬件配置.下面代码检测设

第八章 Libgdx输入处理(7)罗盘

Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   有些Android设备集成了罗盘. 查询罗盘是否可用的代码如下: boolean compassAvail = Gdx.input.isPeripheralAvailable(Peripheral.Compass); 一旦确定罗盘可用,你可以获取其状态: float azimuth = Gdx.input.getAzimuth(); float pitch = Gdx.input.getPitc