本文结合上文一起阅读,更容易理解,libgdx跨平台游戏引擎介绍之Input(三)——事件处理

触摸屏本身对手势输入也有较好的支持。手势可以是用两个手指分开、缩进来表示放大和缩小,一次轻的点击,双击屏幕,一次长按等等。

 

如果你想直接按代码,那么点这里吧GestureDetector,这个类提供了以下手势的检测:

  • tap: 当用户手指点击屏幕然后又离开屏幕。但在按下的过程中,用户的手指不能移出指定的范围,否则就不能检测到这个tap事件。如果在一定的时间内多次点击屏幕,那么会连续检测到多个tap事件。
  • pan: 用户在屏幕上按下手指并朝一个方向拖动。那么探测器会报告当前的触摸点坐标,以及之前的那些触摸点的坐标增量。这个功能可以用来实现2D场景的视野定位。
  • fling: 这个我们可以理解为快速滑过,就是在拖动手指的过程中松开手指。可以用来实现快速滚动翻页等功能。
  • zoom: 把两个手指放在屏幕上,然后靠近或者远离。探测器就会报告两个手指的初始位置和当前位置的距离(用像素表示)。可以用来实现视野的缩放,图片的缩放等功能。
  • pinch: 和zoom比较相似。不过探测器返回的不是距离而是当前和起始位置。如果你想要实现旋转等,那么就必须使用pinch,因为你需要两个坐标来确定转动的向量。

 

GestureDetector实际上也是一个InputProcessor(输入处理器),可以看此文了解InputProcessor相关内容。为了监听手势事件,我们必须要实现GestureListener接口并将它作为参数传入GestureDetector的构造函数里。然后这个手势检测器可以作为InputProcessor,通过InputMultiple(输入调制器)设置或者直接设置成主处理器,代码如下:

public class MyGestureListener implements GestureListener {

   @Override
   public boolean touchDown (int x, int y, int pointer) {
      return false;
   }
   @Override
   public boolean tap (int x, int y, int count) {
      return false;
   }
   @Override
   public boolean longPress (int x, int y) {
      return false;
   }
   @Override
   public boolean fling (float velocityX, float velocityY) {
      return false;
   }
   @Override
   public boolean pan (int x, int y, int deltaX, int deltaY) {
      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;
   }
}
Gdx.input.setInputProcessor(new GestureDetector(new MyGestureListener()));

 

GestureListener可以标志是否它已经把事件处理完了,或者是想把事件传给下一个输入处理器(InputProcessor )来处理,通过每个方法返回true或者false来确认。

当事件被传到输入处理器(InputProcessor ),对应的方法会在ApplicationListener.render()方法执行之前就被调用并处理完毕。

GestureDetector还有第二个构造函数,允许设置一些不同的参数,具体可以参照官方的文档Javadocs

欢迎转载,本文出处:爱撸小杰

libgdx Input