Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在libgdx中通过单点击和双点击实现不同的事件?_Java_Android_Libgdx - Fatal编程技术网

Java 如何在libgdx中通过单点击和双点击实现不同的事件?

Java 如何在libgdx中通过单点击和双点击实现不同的事件?,java,android,libgdx,Java,Android,Libgdx,我正在使用LibGdx开发一款android游戏。我已经在InPurthandler类中实现了手势侦听器类。现在在踢踏法中,我必须实现两个功能,分别在单踢踏和双踢踏上进行短跑和跳远。当我尝试使用函数的计数值实现它时,问题是当我双击屏幕时,计数值首先变为1,然后变为2,这样它就不会进入第二个if语句,并且出现了短跳转的特性。那么如何区分单跳和双跳呢?下面是代码 @Override public boolean tap(float x, float y, int count, int button)

我正在使用LibGdx开发一款android游戏。我已经在InPurthandler类中实现了手势侦听器类。现在在踢踏法中,我必须实现两个功能,分别在单踢踏和双踢踏上进行短跑和跳远。当我尝试使用函数的计数值实现它时,问题是当我双击屏幕时,计数值首先变为1,然后变为2,这样它就不会进入第二个if语句,并且出现了短跳转的特性。那么如何区分单跳和双跳呢?下面是代码

@Override
public boolean tap(float x, float y, int count, int button) {
    // TODO Auto-generated method stub

    if(count==1)
    {
        //feature 1
    }
    if(count==2)
    {
        //feature 2

    }


    return true;
    }

我想到了两个解决方案:

  • 使用延迟技术,该技术包括以下步骤:

    • 抽头计数为2时:触发双抽头动作
    • 当分接计数为1时:等待一段时间,如果未分接第二次,则触发单次分接的动作
  • 代码类似于:

    if(count==1)
    {
        if(wait) //wait is a boolean tells if it was tapped once already
        {
            if(getCurrentTime() - startTime > interval) //getCurrentTime() return current time or frame count or something
            {
                wait = false;
                //feature 1
            }
        }
        else
        {
            wait = true;
            startTime = getCurrentTime(); //start time keeps the time when tapped first one
        }
    }
    if(count==2)
    {
        //feature 2
    
    }
    
    
    return true;
    }   
    
    我在这里看到的问题首先是“如何选择足够长的间隔等待秒点击?”-如果你选择短,将不可能进行双点击,如果太长,将有一个滞后,用户将看到字符没有在点击后直接跳转

  • 根据轻击次数将跳跃分成一个片段并触发它们
  • 这取决于你的“跳跃”机制。如果是这样的话:

    A。加力跳跃

    B。在一段时间内持续增加一些力,使物体保持在空中

    C。避免用力将物体移回地面

    您可以修改时间,使对象在空中停留的时间更长。如果你的“跳跃机制”更像是脉冲加力(在上面的例子中,它可能是没有B点的变量),你可以在A中再次加力一段时间,如果用户在这个间隔结束前第二次点击,继续加力

    此解决方案消除了滞后问题,但取决于您选择的“跳跃机制”

    问候,,
    Michał

    那么你想让我们来写整个逻辑??你给我的更好;我们可以修复这个错误。这将是一种更快的方法。我们已经实现了逻辑,只是它没有进入第二个if语句。那么你能帮我们吗?也许你的doubletap太慢了,无法检测。尝试使用
    GestureDetector.setTapCountInterval(float-tapCountInterval)
    增加延迟,因此,您认为它在这两种情况下都会进入块#1?第二次轻触的
    计数值是多少?如何重置计数器。在每次点击时打印计数器值,看看计数器值是否正确。解决方案1是一种更好的方法。是的,我也考虑过这个逻辑,只是无法计算两次连续点击之间的时间。你能帮个忙吗?你只需要为keep startime设置一些外部变量(它可以在监听器之外的类中),例如使用TimeUtils.millis()作为我示例中的getCurrentTime()。您应该自行设置的时间间隔-只要您认为当前时间中的goo可以通过“system.currentTimeMills”或“TimeUtils.millis”获得,“delay interval”可以手动设置,但我们可以通过什么逻辑来检查在延迟时间间隔内再次点击屏幕