2013-03-03 45 views
8

touch area http://imageshack.us/a/img836/2909/swipe1.pngLibGDX - 获取向上滑动或向右滑动等等?

在绿色区域,用户可以向上,向右,向下滑动。 我现在可以如何获得向上滑动?或向下滑动?或向右滑动或向左滑动? 例如如何获得一个字符串 - > input = getSwiped(); - >然后输入向上,或向右,向下,或向左或向右移动

并且用户可以触摸两个按钮。 1或2. 1代表鸭子,2代表跳跃。

我想同时检查这些输入。用户可以在同一时刻触摸并向上滑动。

我知道有一个手势检测器。我查看了代码,但不知道如何使用滑动部分。

我知道一点点如何检查按钮。问题是,只有在这里 - >如何在同一时间检查输入,以及如何得到横扫向上,向右滑动等

我搜索的发现如何检查Multitouching:

for (int i = 0; i < 10; i++) { 
    if (Gdx.input.isTouched(i) == false) continue; 
    float x = Gdx.input.getX(i); 
    float y = Gdx.graphics.getHeight() - Gdx.input.getY(i) - 1; 
    //... 
} 

回答

17

This解释很好的方法来实现一个系统来检测滑动的方向。我将它张贴在这里,因为文章可能在未来会丢失:

创建一个类名SimpleDirectionGestureDetector

public class SimpleDirectionGestureDetector extends GestureDetector { 
public interface DirectionListener { 
    void onLeft(); 

    void onRight(); 

    void onUp(); 

    void onDown(); 
} 

public SimpleDirectionGestureDetector(DirectionListener directionListener) { 
    super(new DirectionGestureListener(directionListener)); 
} 

private static class DirectionGestureListener extends 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); 
    } 

} 

} 

在LibGdx应用程序的创建()函数,把这个激活手势操作的你的游戏:

Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() { 

@Override 
public void onUp() { 

} 

@Override 
public void onRight() { 

} 

@Override 
public void onLeft() { 

} 

@Override 
public void onDown() { 

} 
})); 
+1

,我在我的游戏使用这个,问题是,每当我在比赛暂停了一段时间的任何方向滑动(通过一段时间我的意思是毫秒,但是值得注意的是)。有没有办法解决它? – 2016-08-15 10:19:41

+0

是不可能知道为什么会发生,如果你不显示代码,这不应该发生 – Lestat 2016-09-03 19:23:44

+0

我不知道为什么它仍然没有被添加到Libgdx。 顺便说一句,如果你想消费滑动手势(例如通过InputMultiplexer顺序),你需要从'fling'方法返回'true' – Enigo 2017-08-14 16:15:23