第八章 Libgdx输入处理(3)输入设备
来源:互联网 发布:java中文比较相似度 编辑:程序博客网 时间:2024/05/21 01:08
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
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
支持: 新浪微博 腾讯微博
- 第八章 Libgdx输入处理(3)输入设备
- 第八章 Libgdx输入处理(1)
- 第八章 Libgdx输入处理(5)简单文本输入
- 第八章 Libgdx输入处理(2)配置和查询
- 第八章 Libgdx输入处理(4)手势捕获
- 第八章 Libgdx输入处理(6)加速度计
- 第八章 Libgdx输入处理(7)罗盘
- 第八章 Libgdx输入处理(8)振动器
- 第八章 Libgdx输入处理(9)菜单捕获
- 第八章 Libgdx输入处理(10)触摸屏
- 9、Libgdx的输入处理
- 第八章 输入验证
- 9.2.2、Libgdx的输入处理之事件处理
- Android输入设备处理流程
- libgdx 中文输入
- 9.1、Libgdx的输入处理的配置和查询
- 9.2、Libgdx的输入处理之鼠标、触摸和键盘
- 9.2.1、Libgdx的输入处理之轮询
- linux c/c++ 后台开发常用组件之:c++日志模块
- Chat_7
- gdb 多线程调试
- 2013.03.18心得
- 尝试开发METRO-UI的企业应用
- 第八章 Libgdx输入处理(3)输入设备
- 怎么判断设备的DID/VID和PCI OptRom内的DID/VID是否匹配
- 对于初学者总结的一些C#问题
- MFC+Opengl:截取对话框的屏幕后,直接作为背景纹理解决方法
- cocos2d-x播放背景音乐和战斗音效
- 小贝
- R.java case expressions must be constant expressions
- 程序员谨防加班猝死之十大建议
- How WebKit's loader works