在 libgdx 中确定平底锅的抛掷
Determining a fling from a pan in libgdx
我正在使用 LibGDX 开发游戏,但我无法从 pan
中确定 fling
。
我的GestureListener
:
@Override
public boolean fling(float velocityX, float velocityY, int button) {
//if (velocityX > 1000f) {
// I can use this to exclude slow pans from the executing a fling
System.out.println("Flinged - velocityX: " + velocityX + ", button: " + button);
//}
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
// but there doesn't seem to be a way to have this not fire on a fling
System.out.println("Panned - deltaX: " + deltaX);
return false;
}
@Override
public boolean panStop(float x, float y, int pointer, int button) {
System.out.println("Pan Stop - pointer: " + pointer + ", button: " + button);
return false;
}
问题是,如果 pan
和 fling
都触发。我知道 fling
基本上是快速的 pan
,但我需要能够确定这两种手势,以便我可以分别处理每个手势。
一种简洁的提问方式是,如何为 fling
和 pan
提供独特的操作?
在我看来,最合理的解决方案是使用 longPress
将一些 布尔值 标志设置为 'enter the panning mode' 当不长按的情况下滑动只会是关于放纵。
我是这样看的:
//the flag for checking if pan mode entered
boolean PAN = false;
@Override
public boolean longPress(float x, float y) {
PAN = true;
return false;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
if(!PAN) {
System.out.println("Flinged - velocityX: " + velocityX + ", button: " + button);
}
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
if(PAN) {
System.out.println("Panned - deltaX: " + deltaX);
}
return false;
}
@Override
public boolean panStop(float x, float y, int pointer, int button) {
if(PAN) {
PAN = false;
System.out.println("Pan Stop - pointer: " + pointer + ", button: " + button);
}
return false;
}
当然,如果 longPress
对于您的目的而言太长,您可以使用 GestureDetector 实例
的 setLongPressSeconds(float longPressSeconds)
方法来更改它
我正在使用 LibGDX 开发游戏,但我无法从 pan
中确定 fling
。
我的GestureListener
:
@Override
public boolean fling(float velocityX, float velocityY, int button) {
//if (velocityX > 1000f) {
// I can use this to exclude slow pans from the executing a fling
System.out.println("Flinged - velocityX: " + velocityX + ", button: " + button);
//}
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
// but there doesn't seem to be a way to have this not fire on a fling
System.out.println("Panned - deltaX: " + deltaX);
return false;
}
@Override
public boolean panStop(float x, float y, int pointer, int button) {
System.out.println("Pan Stop - pointer: " + pointer + ", button: " + button);
return false;
}
问题是,如果 pan
和 fling
都触发。我知道 fling
基本上是快速的 pan
,但我需要能够确定这两种手势,以便我可以分别处理每个手势。
一种简洁的提问方式是,如何为 fling
和 pan
提供独特的操作?
在我看来,最合理的解决方案是使用 longPress
将一些 布尔值 标志设置为 'enter the panning mode' 当不长按的情况下滑动只会是关于放纵。
我是这样看的:
//the flag for checking if pan mode entered
boolean PAN = false;
@Override
public boolean longPress(float x, float y) {
PAN = true;
return false;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
if(!PAN) {
System.out.println("Flinged - velocityX: " + velocityX + ", button: " + button);
}
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
if(PAN) {
System.out.println("Panned - deltaX: " + deltaX);
}
return false;
}
@Override
public boolean panStop(float x, float y, int pointer, int button) {
if(PAN) {
PAN = false;
System.out.println("Pan Stop - pointer: " + pointer + ", button: " + button);
}
return false;
}
当然,如果 longPress
对于您的目的而言太长,您可以使用 GestureDetector 实例
setLongPressSeconds(float longPressSeconds)
方法来更改它