【问题标题】:Determining a fling from a pan in libgdx在 libgdx 中从平底锅中确定一个投掷
【发布时间】:2016-06-02 05:31:57
【问题描述】:

我正在使用 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;
}

问题是如果panfling 都着火了。我知道fling 基本上是一个快速的pan,但我需要能够确定这两个手势之间的关系,以便我可以分别处理每个手势。

一种简洁的提问方式是,我如何为flingpan 提供独特的操作?

【问题讨论】:

    标签: libgdx gestures pan onfling


    【解决方案1】:

    我认为最合理的解决方案是使用longPress设置一些boolean标志来“进入平移模式”,当没有长按的滑动时,只会进行投掷。

    这就是我的看法:

        //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) 方法来更改它

    【讨论】:

    • 这在技术上可行,但似乎不可能获得正确的“感觉”。我能够在 pan 和 fling 之间检测到,但是我已经玩了一段时间的长按持续时间,而且似乎几乎不可能得到一个好的数字来让它工作。在我的 Nexus 5 上进行测试时,约 100 毫秒(0.1 秒)似乎对我来说效果最好,但并不一致。有时对我来说感觉像是平底锅(比滑动/甩动慢)没有注册,有时却注册了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多