Search code examples
iosobjective-csprite-kitskspritenodeskscene

Returning To Previous Scene In Same Condition


I have GamePlayScene that when ended, removes all nodes and displays the Score and an option to restart. I also have a button on that scene that takes you to another scene to display upgradable items. I would like to make a function that adds a back button on the "upgrade items" scene that returns me to the ended GamePlay scene. The code that I have right now returns me back to the GamePlay scene but restarts the game instead of displaying the Game Over text. I've tried searching online but I can't manage to find a good solution. My Code:

GamePlayScene.m

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
                ...
        else if (self.restart) {
                [[GameState sharedInstance] saveState];
                if ([node.name isEqualToString:@"UpgradesButton"]){
                    UpgradeShipScene *upgradeScene = [UpgradeShipScene sceneWithSize:(self.frame.size)];
                    SKTransition *transition = [SKTransition fadeWithDuration:0.5];
                    [self.view presentScene:upgradeScene transition:transition];
                }
                ...
    }

UpgradesScene.m
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch *touch = [touches anyObject];
        CGPoint location = [touch locationInNode:self];
        SKNode *node = [self nodeAtPoint:location];
        if ([node.name isEqualToString:@"BackButton"]){
            for (SKNode *node in [self children]){
                [node removeFromParent];
            }
            GamePlayScene *scene = [GamePlayScene sceneWithSize:self.view.bounds.size];
            SKTransition *transition = [SKTransition fadeWithDuration:0.5];
            [self.view presentScene:scene transition:transition];
        }
}

Solution

  • You can use a SKNode as a "fake" SKScene, and then use a SKAction to animate it (to present or hide).