SpriteKit暂停和恢复SKView

我想暂停和取消暂停SpriteKit中的一个场景,2个button在同一个位置。 场景运行时,我想显示“暂停”button。 场景暂停时,我想隐藏“暂停”button并显示“播放”button。 在SpriteKit中,您可以使用在SpriteKit中定义的self.scene.view.paused。

我的代码:

 @implementation MyScene { SKSpriteNode *PauseButton; SKSpriteNode *PlayButton; } -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { [self Pause]; } return self; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { /* Called when a touch begins */ UITouch * touch = [touches anyObject]; CGPoint location = [touch locationInNode:self]; SKNode * Node = [self nodeAtPoint:location]; if([Node.name isEqualToString:@"PauseButton"]){ self.scene.view.paused = YES; [PauseButton removeFromParent]; [self Resume]; } if([Node.name isEqualToString:@"PlayButton"]){ self.scene.view.paused = NO; [PlayButton removeFromParent]; [self Pause]; } } -(void)Pause{ PauseButton = [SKSpriteNode spriteNodeWithImageNamed:@"Pause.png"]; PauseButton.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 1.04); PauseButton.zPosition = 3; PauseButton.size = CGSizeMake(40, 40); PauseButton.name = @"PauseButton"; [self addChild:PauseButton]; } -(void)Resume{ PlayButton = [SKSpriteNode spriteNodeWithImageNamed:@"Play.png"]; PlayButton.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 1.04); PlayButton.zPosition = 3; PlayButton.size = CGSizeMake(60, 60); PlayButton.name = @"PlayButton"; [self addChild:PlayButton]; } 

它暂停场景,但仍然有暂停button,如果再次触摸暂停button,场景将恢复。 所以现在只有图像不会改变。 我怎样才能解决这个问题?

在SKView暂停时,您不能更新button(或场景中的其他任何内容)。 在touchesBegan方法中,在更新button之前暂停视图(更改顺序不起作用)。 您将需要返回到运行循环,以便在暂停游戏之前更新button。 这是一个方法来做到这一点:

这调用了一个暂停视图的方法。 在touchesBegan [self Resume]语句之后添加这个,并删除self.scene.view.paused = YES

  [self performSelector:@selector(pauseGame) withObject:nil afterDelay:1/60.0]; 

这个方法暂停SKView。 将此添加到您的MyScene.m

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