[ios]SpriteKit 暂停和恢复 SKView

标签: ios Objective-C
发布时间: 2015/4/4 6:26:01
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要暂停和取消暂停 SpriteKit,与 2 个按钮在同一个位置中的一个场景。在运行时的场景,我想要显示 '暂停' 按钮。虽然现场停了下来,我想要 '暂停' 按钮隐藏和显示 '玩' 按钮。在 SpriteKit 中,您可以使用 self.scene.view.paused ,在 SpriteKit 中定义。

我的代码:

@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];

}

它暂停现场,但是那里仍然是暂停按钮,并现场如果我再touch暂停按钮,会恢复。所以,现在只有图像不会改变。如何解决此问题?

解决方法 1:

您不能更新按钮 (或别的场景中) 虽然 SKView 停顿了一下。在你 touchesBegan 的方法,你都暂停更新按钮 (更改顺序不会工作) 之前的视图。您将需要返回到运行循环,所以你的按钮更新之前暂停游戏。这里是一个的方式做到这一点:

此调用一个方法来在一个短暂的延迟后暂停视图。添加这之后你 [self Resume] 中的语句 touchesBegan ,和删除 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;
}
赞助商