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

简介: Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621      简介 在Android中,Libgdx支持的主要输入设备为触摸屏和键盘。

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

 

目录
相关文章
|
11月前
|
安全 Ubuntu Shell
深入解析 vsftpd 2.3.4 的笑脸漏洞及其检测方法
本文详细解析了 vsftpd 2.3.4 版本中的“笑脸漏洞”,该漏洞允许攻击者通过特定用户名和密码触发后门,获取远程代码执行权限。文章提供了漏洞概述、影响范围及一个 Python 脚本,用于检测目标服务器是否受此漏洞影响。通过连接至目标服务器并尝试登录特定用户名,脚本能够判断服务器是否存在该漏洞,并给出相应的警告信息。
661 84
|
移动开发 JavaScript 前端开发
技术经验分享:JavaScript实现Date()——日期格式化的三种常用方法
技术经验分享:JavaScript实现Date()——日期格式化的三种常用方法
367 0
|
编解码 监控 关系型数据库
用PostgreSQL描绘人生的高潮、尿点、低谷 - 窗口/帧 or 斜率/导数/曲率/微积分?
标签 PostgreSQL , 曲线拐点 , 窗口查询 , 帧 , 窗口 , 导数 , 曲率 , 微积分 , 斜率 背景 人生就像一场戏,有高潮,有尿点,有低谷。如果用曲线来描述漫漫人生路的话,怎么找出高潮、尿点、低谷呢? 其实类似的场景还有很多,比如来自传感器(比如人身上可以探测的指标就有很多)的监控数据;服务器的监控数据;温度,湿度的变化数据;等等,都可以数字化,用曲线来表示。
1650 0
|
网络协议 网络性能优化 网络架构
【计算机网络】计算机网络核心知识点
【计算机网络】计算机网络核心知识点
【计算机网络】计算机网络核心知识点
|
小程序
【微信小程序】全局样式、局部样式、全局配置
【微信小程序】全局样式、局部样式、全局配置
1061 0
|
前端开发 测试技术 API
Android 13 新的换行策略和针对日文的优化
Android 13 新的换行策略和针对日文的优化
Android 13 新的换行策略和针对日文的优化
|
Java 容器 Spring
521我发誓读完本文,再也不会担心Spring配置类问题了(下)
521我发誓读完本文,再也不会担心Spring配置类问题了(下)
521我发誓读完本文,再也不会担心Spring配置类问题了(下)
|
3天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。