【问题标题】:SpriteKit memory issuesSpriteKit 内存问题
【发布时间】:2014-12-19 00:46:11
【问题描述】:

我是使用 SpriteKit 进行游戏开发的新手,到目前为止一切正常,但不能真正了解内存管理部分。

我创建了第一个 UIViewController 来充当关卡选择器,第二个 UIViewController 在其中呈现游戏的 SKScene。当我从 SKScene 返回到关卡选择器并且没有释放任何内存时,就会出现问题。

在游戏 SKScene 中,当用户按下后退按钮转到关卡选择器时,我会发布一条通知,告诉第二个 UIViewController 执行转场。

//SKScene
[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];

[[NSNotificationCenter defaultCenter]postNotificationName:@"toLevelSelector" object:nil userInfo:nil];

//Second UIViewController
- (void)toLevel:(NSNotification *)notif
{
    [self performSegueWithIdentifier:@"toLevelSelector" sender:self];
}

您能否帮助我更好地了解 skview 或 skscene 应该在何时何地从内存中释放?

【问题讨论】:

  • 您能解释一下您是如何确定该场景未发布的吗?两个视图控制器是否创建不同的 SKView 实例(不推荐)?

标签: memory uiviewcontroller sprite-kit skscene skview


【解决方案1】:

我认为内存没有被释放是因为你没有关闭持有 SpriteKit 的视图控制器。当我第一次尝试制作在 UIViewControllers 中有菜单然后按钮启动 SpriteKit 游戏的游戏时,我体验到关闭游戏不会结束计时器、声音、音乐等...... 假设您有一个名为 MainMenuViewController 的 UIViewController,并且它有一个调用 GameViewController 的按钮,您可以在其中运行 SpriteKit 游戏。所以为了彻底关闭你的游戏,试着在你的退出游戏按钮中实现这个方法

[(GameViewcontroller *)self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多