zoukankan      html  css  js  c++  java
  • 屏幕释放第八章 Libgdx输入处理(3)输入设备

    文章结束给大家来个程序员笑话:[M]

        

        

        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
    本文版权归作者全部,欢送转载,但未经作者赞成必须保存此段声明,且在文章页面明显位置给出原文连接,否则保存查究法律责任的权力。 
    支撑: 新浪微博 腾讯微博

         

    文章结束给大家分享下程序员的一些笑话语录: 小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!

  • 相关阅读:
    Fedora 19 配置参考
    Lua 函数、闭包、尾调用总结
    基于MFC简单图片裁剪工具
    【OpenGL 学习笔记04】顶点数组
    【OpenGL 学习笔记03】点画多边形
    【OpenGL 学习笔记02】宽点画线
    【OpenGL 学习笔记01】HelloWorld示例
    【SSH + BootStrap】实现的无线点餐系统
    【C++ 基础 11】 函数指针总结
    【C++基础 10】四种cast转换的区别
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3085981.html
Copyright © 2011-2022 走看看