libGDX中的手势识别

作者:

看到群里面很多人在自己做手势识别的东西,其实Libgdx提供了一个GestureDetector来专门处理这个问题。

常用的情况有以下几种:

  • touchDown 用户触碰屏幕
  • longPress 用户长按屏幕
  • tap 快速触碰
  • pan 平移
  • zoom 双指的缩放行为

很明显,GestureDetector是事件驱动的。使用的时候需要实现一个GestureListener,然后将其作为参数传入GestureDetector。

publicclass GListener implements GestureListener{

@Override
publicbooleantouchDown(float x,float y,int pointer,int button) {

returnfalse;
}

@Override
publicbooleantap(float x,float y,int count,int button) {

returnfalse;
}

@Override
publicbooleanlongPress(float x,float y) {

returnfalse;
}

@Override
publicbooleanfling(float velocityX,float velocityY,int button) {

returnfalse;
}

@Override
publicbooleanpan(float x,float y,float deltaX,float deltaY) {

returnfalse;
}

@Override
publicbooleanpanStop(float x,float y,int pointer,int button) {

returnfalse;
}

@Override
publicbooleanzoom (float originalDistance,float currentDistance){

returnfalse;
}

@Override
publicbooleanpinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer){

returnfalse;
}
}

然后实例化并设置到inputPorcessor

Gdx.input.setInputProcessor(new GestureDetector(new GListener()));

这玩意好用,但是有一些坑需要注意:

  • 事件间隔,很多事件都和事件间隔有关,必要的时候可以修改
  • 重复触发,某些事件会重复触发,可以添加一些属性来区分,比如通过触发源来进行二次事件分发。

参考文献

Event Handle
Gesture detection

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注