【问题标题】:LibGDX - Get Swipe Up or swipe right etc.?LibGDX - 向上滑动或向右滑动等?
【发布时间】:2013-02-17 14:39:43
【问题描述】:

touch area http://imageshack.us/a/img836/2909/swipe1.png

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

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

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

我知道有一个 GestureDetector。我查看了代码,但不知道如何使用滑动部分。

我知道一点如何检查按钮。问题只在这里 -> 如何同时检查输入以及如何向上滑动或向右滑动等。

我搜索了一个发现如何检查多点触控:

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;
    //...
}

【问题讨论】:

    标签: java android touch libgdx swipe


    【解决方案1】:

    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 应用程序的 create() 函数中,将其用于激活游戏的手势处理:

    Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() {
    
    @Override
    public void onUp() {
    
    }
    
    @Override
    public void onRight() {
    
    }
    
    @Override
    public void onLeft() {
    
    }
    
    @Override
    public void onDown() {
    
    }
    }));
    

    【讨论】:

    • 我在我的游戏中使用它,问题是每当我向任何方向滑动时,游戏都会停止一段时间(我的意思是毫秒,但很明显)。有办法解决吗?
    • 如果你不显示代码就不可能知道为什么会发生这种情况,这不应该发生
    • 我想知道为什么它仍然没有添加到 Libgdx 中。顺便说一句,如果您想使用滑动手势(例如通过 InputMultiplexer 顺序),您需要从 fling 方法返回“true”
    • @VipulBehl 我对这个基本代码示例有同样的问题。它滞后500毫秒。你找到解决办法了吗?此外,我想收到用户在屏幕上滑动距离的提示。如果他在屏幕的上半部分向下滑动。有谁知道如何获得这个?
    • 似乎 fling() 仅在手势完成时调用。您可以尝试改写 pan()。
    【解决方案2】:

    我做了一个简单的类来识别滑动的方向

    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.input.GestureDetector;
    import com.badlogic.gdx.math.Vector2;
    

    /** * 由 ROHIT 于 2018 年 3 月 11 日创建。 */

    public class swipelistener  {
    
    public boolean isswipright(){
        if(Gdx.input.isTouched()&&Gdx.input.getDeltaX()>0)
            return true;
        return false;
    }
    
    public boolean isswipleft(){
        if(Gdx.input.isTouched()&&Gdx.input.getDeltaX()<0)
            return true;
        return false;
    }
    
    public boolean isswipup(){
        if(Gdx.input.isTouched()&&Gdx.input.getDeltaY()>0)
            return true;
        return false;
    }
    
    public boolean isswipdown(){
        if(Gdx.input.isTouched()&&Gdx.input.getDeltaX()<0)
            return true;
        return false;
    }
    
    }
    

    以上所有代码都使用libGDX Gdx.input.getDeltaX()Gdx.input.getDeltaY() 来获取方向的相对变化。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      相关资源
      最近更新 更多