我正在制作一个游戏,当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
。但是,我不希望任何延误!有没有办法做到这一点??
由于
答案 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
}
这样您就不需要停止整个场景,只需添加与当前游戏状态相关的内容