[英]IOS Sparrow Framework: how to prevent double touch
我在游戏结束时出现了“游戏结束”文本,并将 addeventlistener 添加到 self.stage on touch。 当它被触摸时,它应该执行加载游戏第一个屏幕的事件 function。 但是,在第一个屏幕上,我在屏幕中间单击以播放具有自己的触摸事件的文本。
在模拟器中,如果我在游戏结束屏幕上单击屏幕中间,它还会自动记录点击播放事件并开始游戏。
- 我不认为点击播放的事件处理程序会持续存在,因为我在游戏开始时使用 [self removeAllChildren]。 另外,我在玩游戏期间通过单击同一区域进行了测试,并且正确地没有点击播放的触摸事件记录。
编辑:
我为此做了一个解决方法,但不确定这是否是最佳解决方案:
我使用 NSTimer 在一段时间后启动了 onevent touch
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(attachEventToStart:) userInfo:startTextField repeats:NO];
然后在 attachEventToStart 中:
-(void)attachEventToStart:(NSTimer *)theTimer
{
SPTextField *startTextField = [theTimer userInfo];
[startTextField addEventListener:@selector(gameStartOnTouch:) atObject:self forType:SP_EVENT_TYPE_TOUCH];
}
这行得通,如果有人有更好的解决方案,那就太好了
我找到了比计时器更好的选择。
我需要使用 SPTouchPhaseEnded,所以我在事件回调中添加了以下几行,
SPTouch *touchEnded = [[event touchesWithTarget:self andPhase:SPTouchPhaseEnded] anyObject];
if (!touchEnded)
return;
SOME GAME START CODE HERE...
现在该动作仅在触摸事件结束时发生,因此不会执行到下一个屏幕。 所以对于那些熟悉 html-JS 或 Visual Studio 的人来说,这就像在 key_up 上一样
确保回调参数的类型为 SPTouchEvent 而不是 SPEvent。
我在这里找到了答案: http://forum.sparrow-framework.org/topic/event-listeners-getting-called-too-fast
尽管我不确定您的观点的确切结构或实现,但我认为我可以替代您的解决方案。 与其为开始游戏事件设置触摸延迟,不如在显示“游戏结束”文本时禁用它? 根据我的经验,这对我来说效果更好,并且更加自我记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.