我的最新游戏iPhone在使用Games by Tutorials的帮助下制作了很多问题。
注意:来自SpriteKit- the right way to multitask的方法不起作用。
因此,在我的ViewController.m文件中,我正在定义私有变量SKView * _skView。
然后,我做这样的事情:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if(!_skView)
{
_skView = [[SKView alloc] initWithFrame:self.view.bounds];
_skView.showsFPS = NO;
_skView.showsNodeCount = NO;
// Create and configure the scene.
SKScene * scene = [MainMenuScene sceneWithSize:_skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene.
[_skView presentScene:scene];
[self.view addSubview:_skView];
}
}
我定义了_skView,一切正常。
但是,当我中断游戏时,它会将其状态重置为初始状态,因此,例如,如果我正在玩,有人打电话给我,游戏会切换回主菜单。它不可能是这样的。
根据我上面提到的网站,我创建了这个:
- (void)applicationWillResignActive:(UIApplication *)application
{
SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = NO;
}
但游戏一旦启动就会崩溃,因为第二种方法被调用而SKView *视图为零。 从self.window.rootViewController.view获取它不起作用。
我也尝试从self.window.rootViewController.view.subviews获取它,但它也不起作用。
我无法像这样定义我的SKView(在ViewController.m中):
SKView * skView = (SKView *)self.view;
因为我的GameCenterController出错了。
有人可以帮我正确获取实际的skView并正确暂停吗?
答案 0 :(得分:10)
您可以在管理SKView的ViewController中自己订阅这些通知。然后你不必导航一些奇怪的层次结构来获得它。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willEnterBackground)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willEnterForeground)
name:UIApplicationWillEnterForegroundNotification
object:nil];
- (void)willEnterForeground {
self.skView.paused = NO;
}
- (void)willEnterBackground {
// pause it and remember to resume the animation when we enter the foreground
self.skView.paused = YES;
}