【问题标题】:How to implement different events through single tap and double tap in libgdx?如何在 libgdx 中通过单击和双击实现不同的事件?
【发布时间】:2015-08-26 13:51:52
【问题描述】:

我正在使用 LibGdx 开发一个安卓游戏。我在 InputHandler 类中实现了手势监听器类。现在在 tap 方法中,我必须分别实现两个功能,分别是单击和双击时的短跳和长跳。当我尝试使用函数的计数值来实现它时,问题是当我双击屏幕时,计数值先变为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;
    }

【问题讨论】:

  • 所以你要我们写整个逻辑??最好是你给你的;逻辑,我们可以修复这个错误。这将是一种更快的方法
  • 我们已经实现了逻辑,只是它没有进入第二个 if 语句。那么你能帮我们解决这个问题吗?
  • 也许您的双击速度太慢而无法检测到。尝试使用GestureDetector.setTapCountInterval(float tapCountInterval) 增加您的延迟
  • 那么,你认为它在两种情况下都进入了区块#1?第二次点击时count 的值是多少?
  • 您如何重置您的计数器。在每次点击时打印计数器值以查看计数器值是否正确

标签: java android libgdx


【解决方案1】:

我想到了两个解决方案:

  1. 使用延迟技术,这将伴随以下步骤:

    • 当点击计数为 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;
}   

我在这里看到的问题首先是“如何选择足够长的间隔等待第二次点击?” - 如果选择短则无法双击,如果太长则会出现延迟,用户会看到角色在点击后没有直接跳跃

  1. 根据点击次数划分跳跃并触发它们

这取决于你的“跳跃”机制。如果是这样的:

一个。加力跳跃

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

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

您可以修改 时间 以使物体在空中停留的时间更长。如果您的“跳跃机制”更像是增加力的冲动(在上面的示例中,它将是没有 B 点的变体),您可以在一段时间内再次在 A 中添加力,如果用户在此间隔结束之前第二次点击继续添加它只是更长。

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

问候, 米哈乌

【讨论】:

  • 解决方案 1 是更好的方法
  • 是的,我也想过这个逻辑,只是无法计算两次连续点击之间的时间。你能帮忙吗?
  • 你只需要有一些外部变量来保持 startime (它可以在你的监听器之外的类中),例如使用 TimeUtils.millis() 作为我的示例中的 getCurrentTime() 。您应该自己设定的间隔 - 只要您认为合适
  • 当前时间可以通过“system.currentTimeMills”或“TimeUtils.millis”获得,“延迟间隔”可以手动设置,但是我们可以通过什么逻辑来检查屏幕是否再次被点击延迟时间间隔
猜你喜欢
  • 2011-01-06
  • 1970-01-01
  • 2011-06-05
  • 2019-07-06
  • 1970-01-01
  • 2018-07-25
  • 2014-05-17
  • 2014-10-14
  • 1970-01-01
相关资源
最近更新 更多