重置SpriteKit场景

4
我有两个不同的视图控制器,第一个中有一个SKScene。在那里我们可以找到游戏本身,在第二个视图控制器中有一个分数和一个“重新玩”按钮。当游戏结束时,我会删除场景,并在用户点击“重新玩”时再次进行allocinit。我的问题是,如果在游戏结束时某个SKSpriteNode被旋转了,那么在删除并重置它之后,当我回到该场景时,它仍然保持着与删除场景前完全相同的旋转角度。 -initWithSize被正确调用,所以我不确定为什么会发生这种情况。我的问题是是否有一种方法可以重置SKScene,使其与第一次玩游戏时完全相同。谢谢!

在场景的dealloc方法中放置NSLog。看起来你的场景没有被释放。 - Andrey Gordeev
1
您可以使用 presentScene 简单地重新加载场景。 - ZeMoon
@AndreyGordeev 我刚试了一下,dealloc方法被调用了。 - IOS_DEV
@akashg 当我在第二个视图控制器中并且想要返回到游戏场景时,我已经这样做了。 - IOS_DEV
1个回答

4

是的,创建一个方法来创建场景并进行调用。如果您有作为属性的对象,请在调用场景创建方法之前将它们从父级移除。

示例:

-(id)initWithSize:(CGSize)size {
    [super initWithSize:size];
    [self startNewGame];
    return self;
}

-(void)startNewGame {
//all your scene configs here
}

-(void)buttonThatsCalledOnRestartClick {
   [self startNewGame];
}

你看到雪碧图在同一位置的原因是因为当你重新开始时,没有将其从场景中移除。由于你可能应该完全重建你的场景,所以你应该从场景中删除所有对象,然后再次调用你的 "startNewGame" 方法。

删除场景中所有对象的示例:

for (SKNode* node in self.children) {
    [node removeFromParent];
}

1
最好使用一个复合层来管理你的场景,并使用SKNode类的removeAllChildren方法删除所有子节点。 - AndrewShmig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接