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

这里我们获取的是指针索引00是默认的)和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
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
支持:新浪微博腾讯微博

更多相关文章

  1. Android(安卓)ViewDragHelper实现窗帘效果小挂件
  2. Android——最佳性能实战
  3. Andoird用户界面设计上手指南:设置字体大小
  4. android 触摸点在屏幕中的坐标与bitmap在屏幕中坐标的比较
  5. 适用于各种连锁企业15寸多点触摸android收款机消费机pos机
  6. Android(安卓)让人又爱又恨的触摸机制(二)
  7. [Android] 滑动操作的原理及处理
  8. android 2.0发布
  9. 多点触摸测试

随机推荐

  1. Android(安卓)属性
  2. android通用JSON解析
  3. Android 设置铃声
  4. android之网络请求框架OKhttp、原生http
  5. android升级数据库(Sqlite)简单示例
  6. Android library projects cannot be lau
  7. Android dialog设置无背景
  8. android 圆角布局
  9. Android 在Camera 的 SurfaceView添加控
  10. Android AnalogClock and DigitalClock e