更新中的self.scene.view.paused = YES

时间:2014-04-29 07:26:27

标签: ios sprite-kit

我正在制作一个游戏,当2个物体(物体A和物体B)发生碰撞时,游戏就会结束。每次调用更新时,对象A的位置都会发生变化。对象B的位置是相同的。代码是:

[self enumerateChildNodesWithName:@"objA" usingBlock:^(SKNode *node, BOOL *stop) {

    if ([objB intersectsNode:node])
    {

        [node removeFromParent];
        [self GameOver];

    }

问题是:我希望objA不会在碰撞后消失。所以,为此我删除了[node removeFromParent];,但是因为一次又一次地调用更新。我的节点数量增加,我添加的声音似乎永远不会结束。所以,我尝试的是添加:

[self performSelector:@selector(pauseGame) withObject:Nil afterDelay:0.1];

-(void) pauseGame
{
self.scene.view.paused = YES;

[self performSelector:@selector(gameOver) withObject:Nil afterDelay:0.1];   

}

我不得不延迟使用performSelector,因为在更新中添加self.scene.view.paused = YES;并不允许我转到gameOver。但是,我不希望任何延误!有没有办法做到这一点??

由于

1 个答案:

答案 0 :(得分:1)

只需在场景中使用状态变量即可指示当前状态。 使用此状态可以在场景对象上运行更新。

例如(伪代码):

update() 
     if (state == GAME_PLAY) {
         // Update relevant game nodes
     } else if (state ==  GAME_OVER) {
         // Update only what needs to be updated when the game is over
     }

这样您就不需要停止整个场景,只需添加与当前游戏状态相关的内容