2

到目前为止,我一直在开发一款 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];
    }
}
4

1 回答 1

3

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

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

[self removeAllChildren];
[self removeAllActions];
...
[self addChild:node];
etc
于 2014-01-20T05:35:09.087 回答