【问题标题】:iOS7 Sprite Kit how to reset/start new game with Sprite Kit?iOS7 Sprite Kit 如何使用 Sprite Kit 重置/开始新游戏?
【发布时间】:2014-01-19 18:50:34
【问题描述】:

到目前为止,我一直在开发一款 Sprite Kit 游戏,每次我在 xCode 中点击“播放”按钮时都会启动一个新游戏。现在我正在尝试在游戏中实现一个“新游戏”按钮,它将重置游戏并开始一个新游戏。

我需要采取哪些步骤来确保我的旧游戏场景消失,并且没有任何悬空引用?

  • 我是否需要在场景中进行任何类型的手动清理? (就像旧的 viewDidUnload 一样)还是 ARC 会处理所有事情?
  • 我是否需要明确删除我可能已从场景中添加到其父视图的任何视图控制器视图?
  • 是否有任何内置方法可以帮助我重置游戏?

这是我迄今为止一直在使用的。

-(void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    //set the view only once, because this method will be called again on rotation
    if(!self.kkView.scene)
    {
        landscapeSize = self.kkView.bounds.size;

        self.kkView.showsFPS = NO;
        self.kkView.showsNodeCount = NO;
        self.kkView.showsDrawCount = NO;

        MyScene * gameScene = [MyScene sceneWithSize:landscapeSize];
        gameScene.scaleMode = SKSceneScaleModeAspectFill;

        IntroScene * scene = [IntroScene sceneWithSize:landscapeSize];
        scene.gameScene = gameScene;

        scene.scaleMode = SKSceneScaleModeAspectFill;
        [self.kkView presentScene:scene];
    }
}

【问题讨论】:

  • 最好的建议是使用 Instruments 来验证没有任何泄漏。分析器也会有所帮助,将日志语句放入类的 dealloc 方法中也会有所帮助。其他一切都需要使用相关代码进行调试。

标签: objective-c ios7 reset sprite-kit skscene


【解决方案1】:

ARC 应该负责清理对象创建(例如 +sceneWithSize:)。我还相信,如果您要删除整个 SKScene,则会为您完成所有附加节点和操作的清理工作(可能在 -willMoveFromView: 方法中)。

但是,如果您希望保留场景并重置场景子类本身内的节点和动作,那么您可以在场景的设置部分之前执行以下操作(在 -didMoveToView: 方法或您的自己的设置方法):

[self removeAllChildren];
[self removeAllActions];
...
[self addChild:node];
etc

【讨论】:

  • 感谢这些代码行帮助了我。但由于某种原因,弧并没有清理所有东西(我使用的是 beta XCode)。所以我在调用相同的 SKSCENE 之前使用了这些删除方法,现在一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多