我如何从SKScene转移到UIViewController

时间:2014-01-06 14:21:56

标签: ios objective-c uiviewcontroller

我的spritkit游戏有点问题。 我创造了一个小Jump N Run游戏,企鹅必须躲避冰山,或者你也可以收集鱼。作为企鹅,你有三条命。这些生命现在到底是因为你已经遇到过三次冰山,我希望它会被自动重定向到一个新的UIViewController,然后最终可以执行新的动作。我拥有使用xib文件创建的所有内容,现在只是不知道我是如何将skscene恢复为UIViewController gelange ...

如果有人可以帮助我会很棒。 :)

1 个答案:

答案 0 :(得分:1)

最干净的解决方案是声明并实施一个协议,让UIViewController知道它应该对SKScene中的更改作出反应。

@protocol MySceneDelegate <NSObject>
- (void)closeScene;
@end

@interface MyScene : SKScene
@property(nonatomic, strong) SKShapeNode *ball;
@property (weak) id <MySceneDelegate> delegate;
@end

显示场景的视图控制器应实现closeScene方法并将其自身设置为场景的委托。例如:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

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

    // Set the delegate
    [scene setDelegate:self];

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

然后在场景中,您可以调用视图控制器的closeScene方法,该方法被设置为委托:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    /* Called when a touch begins */

    if ([_delegate respondsToSelector:@selector(closeScene)])
    {
        [_delegate performSelector:@selector(closeScene)];
    }
}

希望它有所帮助。