繁体   English   中英

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

[英]How to implement different events through single tap and double tap in libgdx?

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

我想到了两个解决方案:

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

我在这里看到的问题首先是“如何选择足够长的间隔来等待secon tap?” - 如果你选择做空则不可能进行双击,如果太长则会出现延迟,用户会看到角色在点击后没有直接跳跃

  1. 划分跳跃并触发它们取决于点击次数

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

A。 增加力量跳跃

B。 不断增加一些力量在一段时间内保持物体的空气

C. 避免加力将物体拉回地面

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

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

此致,Michał

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM