【问题标题】:Go back to view controller from SKScene从 SKScene 返回查看控制器
【发布时间】:2014-02-20 18:41:19
【问题描述】:

因此,当您使用 SpriteKit 模板创建项目时。你有你的视图控制器和你的 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。请使用代码回答以进行澄清谢谢

【问题讨论】:

    标签: ios ios7 uiviewcontroller sprite-kit skscene


    【解决方案1】:

    您的场景需要向您的控制器提供一条通信线路,以表明已完成。例如,您可以在场景中创建委托协议和相应的属性。一个例子:

    @protocol TCAMySceneDelegate;
    
    @interface TCAMyScene : SKScene
    
    @property (nonatomic, weak> id<TCAMySceneDelegate> delegate;
    
    @end
    
    @protocol TCAMySceneDelegate <NSObject>
    - (void)mySceneDidFinish:(TCAMyScene *)gameScene;
    @end
    

    然后,在您的TCAMyScene 的.m 中

    - (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
    }
    

    【讨论】:

    • 这似乎对我不起作用,mySceneDiDFinish 没有被触发,我的 TCAScene.h 文件中的第一个代码块正确吗?
    • 实例化TCAMyScene时需要设置委托:theScene.delegate = self
    • 哦,当然。非常感谢您的精彩回答!这非常有效。最后一个问题,虽然我检查了类参考,但似乎无法找到某种解除函数来在调用 endTheGame 函数时结束场景。关闭场景的最佳方法是什么?
    • 或者在视图控制器的 mySceneDidFinish 方法中从视图中删除场景是否更好?如果有怎么办?
    • SKView 类参考没有显示在您呈现场景后删除场景的方法?
    猜你喜欢
    • 2015-01-11
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多