繁体   English   中英

IOS Sparrow框架:如何防止双重触摸

[英]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.

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