因此,当您使用 SpriteKit 模板创建项目时。你有你的 View Controller 和你的 SKScene。
从我的 View Controller 中,我使用默认给出的代码开始我的游戏并呈现场景。
在我的 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];
}
}
当用户在游戏中失败时,我想关闭场景并返回我拥有的 View Controller 。我的搜索似乎找不到任何东西来返回原始 View Controller ,只是插入游戏结束场景。但我不想推送到另一个场景,只需关闭当前场景并返回我的 TCAViewController。请使用代码回答以进行澄清谢谢
最佳答案
您的场景需要向您的 Controller 提供一条通信线路以指示已完成。例如,您可以在场景中创建委托(delegate)协议(protocol)和相应的属性。一个例子:
@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];
}
在您的 View Controller 中,将自己设置为场景的委托(delegate)并实现该方法:
- (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
}
关于ios - 从 SKScene 返回查看 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916702/