4

我在游戏结束时出现了“游戏结束”文本,并将 addeventlistener 添加到 self.stage on touch。当它被触摸时,它应该执行加载游戏第一个屏幕的事件函数。但是,在第一个屏幕上,我在屏幕中间单击以播放具有自己的触摸事件的文本。

在模拟器中,如果我在游戏结束屏幕上单击屏幕中间,它还会自动记录点击播放事件并开始游戏。

- 我不认为点击播放的事件处理程序会持续存在,因为我在游戏开始时使用 [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];
}

这行得通,如果有人有更好的解决方案,那就太好了

4

2 回答 2

2

我找到了比计时器更好的选择。

我需要使用 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

于 2011-08-24T04:48:59.007 回答
1

尽管我不确定您的观点的确切结构或实现,但我认为我可以替代您的解决方案。与其为开始游戏事件设置触摸延迟,不如在显示“游戏结束”文本时禁用它?根据我的经验,这对我来说效果更好,并且更加自我记录。

于 2011-08-22T14:37:49.070 回答