Java 如何在libgdx中通过单点击和双点击实现不同的事件?
我正在使用LibGdx开发一款android游戏。我已经在InPurthandler类中实现了手势侦听器类。现在在踢踏法中,我必须实现两个功能,分别在单踢踏和双踢踏上进行短跑和跳远。当我尝试使用函数的计数值实现它时,问题是当我双击屏幕时,计数值首先变为1,然后变为2,这样它就不会进入第二个if语句,并且出现了短跳转的特性。那么如何区分单跳和双跳呢?下面是代码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)
@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;
}
我在这里看到的问题首先是“如何选择足够长的间隔等待秒点击?”-如果你选择短,将不可能进行双点击,如果太长,将有一个滞后,用户将看到字符没有在点击后直接跳转
Michał那么你想让我们来写整个逻辑??你给我的更好;我们可以修复这个错误。这将是一种更快的方法。我们已经实现了逻辑,只是它没有进入第二个if语句。那么你能帮我们吗?也许你的doubletap太慢了,无法检测。尝试使用
GestureDetector.setTapCountInterval(float-tapCountInterval)
增加延迟,因此,您认为它在这两种情况下都会进入块#1?第二次轻触的计数值是多少?如何重置计数器。在每次点击时打印计数器值,看看计数器值是否正确。解决方案1是一种更好的方法。是的,我也考虑过这个逻辑,只是无法计算两次连续点击之间的时间。你能帮个忙吗?你只需要为keep startime设置一些外部变量(它可以在监听器之外的类中),例如使用TimeUtils.millis()作为我示例中的getCurrentTime()。您应该自行设置的时间间隔-只要您认为当前时间中的goo可以通过“system.currentTimeMills”或“TimeUtils.millis”获得,“delay interval”可以手动设置,但我们可以通过什么逻辑来检查在延迟时间间隔内再次点击屏幕