Вернуться к просмотру контроллера от SKScene

Поэтому, когда вы создаете проект, используя шаблон SpriteKit. У вас есть контроллер View и ваш SKScene.

С моего контроллера просмотра я запускаю игру с кодом, заданным по умолчанию, и представляю сцену.

В моем TCAViewcontroller.m

- (IBAction)startGame:(id)sender {

    NSLog(@"Start Game triggered");
    mainPageImage.hidden = 1;
    // Configure the view.
    // Configure the view after it has been sized for the correct orientation.
    SKView *skView = (SKView *)self.view;
    if (!skView.scene) {
        skView.showsFPS = YES;
        skView.showsNodeCount = YES;

        // Create and configure the scene.
        TCAMyScene *theScene = [TCAMyScene sceneWithSize:skView.bounds.size];
        theScene.scaleMode = SKSceneScaleModeAspectFill;

        // Present the scene.
        [skView presentScene:theScene];

    }
}

Когда пользователь проигрывает в игре, я хотел бы закрыть сцену и вернуться к своему контроллеру просмотра. Похоже, я ничего не могу найти в своих поисках, чтобы вернуться к исходному контроллеру вида, просто нажать на игру поверх сцены. Но я не хочу переходить на другую сцену, просто отмените текущую сцену и вернитесь к моему TCAViewController. Пожалуйста, ответьте, используя код для уточнения. Спасибо

1 ответ

Решение

Ваша сцена должна предложить линию связи с вашим контроллером, чтобы указать, что она закончена. Вы можете, например, создать протокол делегата и соответствующее свойство в вашей сцене. Пример:

@protocol TCAMySceneDelegate;

@interface TCAMyScene : SKScene

@property (nonatomic, weak> id<TCAMySceneDelegate> delegate;

@end

@protocol TCAMySceneDelegate <NSObject>
- (void)mySceneDidFinish:(TCAMyScene *)gameScene;
@end

Затем в.m вашего TCAMyScene

- (void)endTheGame {
    // Other game-ending code
    [self.delegate mySceneDidFinish:self];
}

В вашем контроллере представления установите себя в качестве делегата для вашей сцены и реализуйте метод:

- (IBAction)startGame:(id)sender {
    // Other code

    TCAMyScene *theScene = [TCAMyScene sceneWithSize:skView.bounds.size];
    theScene.scaleMode = SKSceneScaleModeAspectFill;
    theScene.delegate = self;

    // Other code
}

- (void)mySceneDidFinish:(TCAMyScene *)myScene {
    // logic for dismissing the view controller
}
Другие вопросы по тегам