LibGDX 如何识别手势滑动?
LibGDX How to recognize a gestureswipe?
我正在使用一个可以显示不同案例的应用程序。您可以向右或向左滑动,具体取决于您的选择。拖动的东西是有效的,但问题是要知道对象何时被滑动并放到你想要的方向。我该如何继续?
(类似于火种应用程序)
public class SimpleGestureDetector extends GestureDetector {
public interface DirectionListener {
void onLeft();
void onRight();
void onUp();
void onDown();
}
public SimpleGestureDetector(DirectionListener directionListener) {
super(new DirectionGestureListener(directionListener));
}
private static class DirectionGestureListener extends com.badlogic.gdx.input.GestureDetector.GestureAdapter {
DirectionListener directionListener;
public DirectionGestureListener(DirectionListener directionListener){
this.directionListener = directionListener;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
if(Math.abs(velocityX)>Math.abs(velocityY)){
if(velocityX>0){
directionListener.onRight();
}else{
directionListener.onLeft();
}
}else{
if(velocityY>0){
directionListener.onDown();
}else{
directionListener.onUp();
}
}
return super.fling(velocityX, velocityY, button);
}
}
}
应用程序屏幕的外观:
stage = new Stage();
SimpleGestureDetector sgd = new SimpleGestureDetector(new SimpleGestureDetector.DirectionListener() {
@Override
public void onUp() {
leaf.setY(leaf.getY()+100);
}
@Override
public void onRight() {
leaf.setX(leaf.getX()+100);
}
}
@Override
public void onLeft() {
leaf.setX(leaf.getX()-100);
}
@Override
public void onDown() {
leaf.setY(leaf.getY()-100);
}
});
当用户在屏幕上拖动手指时,将调用您的平移方法。因此,当拖动开始时,您的方法将获得手指的 x 和 y 坐标。当第一次调用 pan 时,你应该记住它们。使用一些 bool 变量,称为 "firstCall" 或 somethig 所以当调用 pan 时,检查它并从 true 设置为 false...
然后,当用户抬起手指时,将调用 panStop。同样,您将收到 x 和 y 坐标。因此,将它们与您之前记得的那些进行比较,并做一些基本的数学运算。即如果旧 y 几乎与新 y 相同,则表示滑动是水平的。如果新 x 比旧 x 大,则表示向右滑动。诸如此类。
我正在使用一个可以显示不同案例的应用程序。您可以向右或向左滑动,具体取决于您的选择。拖动的东西是有效的,但问题是要知道对象何时被滑动并放到你想要的方向。我该如何继续?
(类似于火种应用程序)
public class SimpleGestureDetector extends GestureDetector {
public interface DirectionListener {
void onLeft();
void onRight();
void onUp();
void onDown();
}
public SimpleGestureDetector(DirectionListener directionListener) {
super(new DirectionGestureListener(directionListener));
}
private static class DirectionGestureListener extends com.badlogic.gdx.input.GestureDetector.GestureAdapter {
DirectionListener directionListener;
public DirectionGestureListener(DirectionListener directionListener){
this.directionListener = directionListener;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
if(Math.abs(velocityX)>Math.abs(velocityY)){
if(velocityX>0){
directionListener.onRight();
}else{
directionListener.onLeft();
}
}else{
if(velocityY>0){
directionListener.onDown();
}else{
directionListener.onUp();
}
}
return super.fling(velocityX, velocityY, button);
}
}
}
应用程序屏幕的外观:
stage = new Stage();
SimpleGestureDetector sgd = new SimpleGestureDetector(new SimpleGestureDetector.DirectionListener() {
@Override
public void onUp() {
leaf.setY(leaf.getY()+100);
}
@Override
public void onRight() {
leaf.setX(leaf.getX()+100);
}
}
@Override
public void onLeft() {
leaf.setX(leaf.getX()-100);
}
@Override
public void onDown() {
leaf.setY(leaf.getY()-100);
}
});
当用户在屏幕上拖动手指时,将调用您的平移方法。因此,当拖动开始时,您的方法将获得手指的 x 和 y 坐标。当第一次调用 pan 时,你应该记住它们。使用一些 bool 变量,称为 "firstCall" 或 somethig 所以当调用 pan 时,检查它并从 true 设置为 false...
然后,当用户抬起手指时,将调用 panStop。同样,您将收到 x 和 y 坐标。因此,将它们与您之前记得的那些进行比较,并做一些基本的数学运算。即如果旧 y 几乎与新 y 相同,则表示滑动是水平的。如果新 x 比旧 x 大,则表示向右滑动。诸如此类。