首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何杀死SKScene

如何杀死SKScene
EN

Stack Overflow用户
提问于 2014-11-21 02:36:06
回答 2查看 210关注 0票数 0

我有一个和MasterViewController的游戏。它有一个连接到GameViewController的“播放”按钮。除了我在游戏场景的更新方法中添加了一个NSLog,并且在故事板上创建了一个从GameViewController返回到MasterViewController的“退出”按钮之外,游戏的构建提供了简单的“退出”按钮。

一切都按预期运行。我启动应用程序并触摸播放按钮,它就会转换到GameScene上的GameViewController。很好,我看到了标准的"Hello World“消息,可以通过触摸来创建旋转的宇宙飞船。我开始从update方法获取NSLog输出。太棒了。

但是,当我单击Quit按钮并返回到MasterViewController时,我仍然从GameScene update方法获得NSLog输出,因此GameScene仍然是活动的。我想要GameScene消失。向GameScene添加了一个取消分配,但它永远不会被调用,可能是因为ARC。

在GameViewController中,我添加了一个弱gameScene属性,并且:

代码语言:javascript
复制
- (void)viewWillDisappear:(BOOL)animated {
   [super viewWillDisappear:animated];
   NSLog(@"viewWillDisappear");
   [_gameScene removeAllChildren];
   [_gameScene removeAllActions];
   [_gameScene removeFromParent];
   _gameScene = nil;
}

仍然从GameScene更新方法获得NSLog输出。叹息..。我怎么杀死GameScene死了,死了,死了?

我做了几次播放/退出/播放/退出转换。update方法的输出为:

代码语言:javascript
复制
2014-11-20 12:48:41.551 Demo[7386:2004098] update: 0x7b091090
2014-11-20 12:48:42.095 Demo[7386:2004098] update: 0x7ed21020
2014-11-20 12:48:42.656 Demo[7386:2004098] update: 0x7eb1c4b0
2014-11-20 12:48:43.217 Demo[7386:2004098] update: 0x7b091090
2014-11-20 12:48:43.762 Demo[7386:2004098] update: 0x7ed21020
2014-11-20 12:48:44.322 Demo[7386:2004098] update: 0x7eb1c4b0

所以我所有的GameScenes在后台仍然是活动的。

EN

回答 2

Stack Overflow用户

发布于 2014-11-21 02:47:13

必须确保没有其他对象强烈指向要从内存中删除的对象。参见Apple Developer

票数 0
EN

Stack Overflow用户

发布于 2014-11-24 00:47:03

我找到了一个变通的办法--使用导航控制器,我总是把它藏起来,为我的游戏腾出空间。要转换到层次结构中的下一个视图控制器,请使用"Show“段。要弹出,请添加您自己的后退按钮并连接操作:

代码语言:javascript
复制
- (IBAction)backButtonClicked:(UIButton *)sender {
   [[self navigationController] popViewControllerAnimated:YES];
}

在我的GameViewController中还有一个地方,我使用“暂停”按钮来弹出所有的方式返回到根视图控制器。

代码语言:javascript
复制
- (IBAction)pauseButtonClicked:(UIButton *)sender {
   NSArray * viewControllers = self.navigationController.viewControllers;
   NSLog(@"nav view controllers: %@", viewControllers);
   UIViewController * targetViewController = viewControllers[0];
   NSLog(@"target controller: %@", targetViewController);
   [self.navigationController popToViewController:targetViewController animated:YES];
}

当GameViewController和GameScene消失时,所有这些操作都会正确地释放它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27047022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档