ios tutorial SpriteKit Pausieren und Fortsetzen von SKView



swift spritekit classes (1)

Ich möchte eine Szene in SpriteKit pausieren und aufheben, mit 2 Tasten an der gleichen Position. Während die Szene läuft, möchte ich den 'Pause' Button zeigen. Während die Szene pausiert ist, möchte ich den 'Pause' Button ausblenden und den 'Play' Button anzeigen. In SpriteKit können Sie self.scene.view.paused das in SpriteKit definiert ist.

Mein Code:

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

}

Es pausiert die Szene, aber es gibt immer noch die Pause-Taste, und wenn ich die Pause-Taste erneut drücke, wird die Szene fortgesetzt. Jetzt ändern sich nur die Bilder nicht. Wie kann ich das beheben?


Sie können die Schaltfläche (oder etwas anderes in der Szene) nicht aktualisieren, während das SKView angehalten ist. In der Methode touchesBegan pausieren Sie die Ansicht, bevor Sie die Schaltfläche aktualisieren (die Änderung der Reihenfolge funktioniert nicht). Sie müssen zur Laufschleife zurückkehren, damit Ihre Schaltfläche aktualisiert wird, bevor Sie das Spiel pausieren. Hier ist eine Möglichkeit, das zu tun:

Dies ruft eine Methode auf, um die Ansicht nach einer kurzen Verzögerung anzuhalten. Fügen Sie dies nach Ihrer [self Resume] touchesBegan in touchesBegan und löschen Sie self.scene.view.paused = YES .

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

Diese Methode pausiert das SKView. Füge das zu deiner MyScene.m hinzu

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