美文网首页LibGDX
LibGDX输入模块之手势检测

LibGDX输入模块之手势检测

作者: 天神Deity | 来源:发表于2017-09-06 21:19 被阅读2次

    触摸屏可以很好地适应基于手势的输入。 一个手势可能是用两根手指夹住,表示要放大,点击或双击,长按等等。
    Libgdx提供了一个GestureDetector (source)类,可以检测以下手势:

    1. touchDown: 用户触摸屏幕
    2. longPress: 用户长按
    3. tap: 用户点击
    4. pan:用户在屏幕上拖动手指,监听器将报告当前的坐标与初始坐标的差值,这在移动相机时非常有用。
    5. panStop:不再平移时调用。
    6. fling: 用户将手指拖过屏幕,然后将其抬起(甩),滑动手势
    7. zoom:缩放,两个手指分开或者夹紧,在相机缩放时非常有用
    8. pinch:类似于缩放,监听器将报告初始和当前手指位置(不是距离), 有助于实现相机缩放和更复杂的手势,如旋转。

    GestureDetector是伪装的事件处理程序,要监听手势,必须实现GestureListener接口并将其传递给GestureDetector的构造函数,然后将GestureDetector设置为InputProcessor,或者在InputMultiplexer上或作为主InputProcessor:

    public class MyGestureListener implements GestureListener{
    
        @Override
        public boolean touchDown(float x, float y, int pointer, int button) {
                
            return false;
        }
            
        @Override
        public boolean tap(float x, float y, int count, int button) {
                
            return false;
        }
            
        @Override
        public boolean longPress(float x, float y) {
                
            return false;
        }
            
        @Override
        public boolean fling(float velocityX, float velocityY, int button) {
                
            return false;
        }
            
        @Override
        public boolean pan(float x, float y, float deltaX, float deltaY) {
                
            return false;
        }
            
        @Override
        public boolean panStop(float x, float y, int pointer, int button) {
                
            return false;
        }
            
        @Override
        public boolean zoom (float originalDistance, float currentDistance){
                
           return false;
        }
    
        @Override
        public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer){
                
           return false;
        }
        @Override
        public void pinchStop () {
        }
    }
    
    Gdx.input.setInputProcessor(new GestureDetector(new MyGestureListener()));
    

    GestureListener可以通过从其方法分别返回true或false来发出是否消费掉事件或者希望将其传递给下一个InputProcessor。

    与正常InputProcessor事件一样,相应的方法将在调用ApplicationListener.render()之前调用。

    GestureDetector还具有第二个构造函数,允许它为手势检测指定各种参数。 请参考Javadocs了解更多信息。

    相关文章

      网友评论

        本文标题:LibGDX输入模块之手势检测

        本文链接:https://www.haomeiwen.com/subject/dugvjxtx.html