【问题标题】:Reset scene in SpriteKit在 SpriteKit 中重置场景
【发布时间】:2014-04-21 20:11:00
【问题描述】:

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

【问题讨论】:

  • NSLog 放入Scene 的dealloc 方法中。看来您的场景没有解除分配。
  • 您可以使用presentScene简单地重新加载场景
  • @AndreyGordeev 我刚刚尝试过,正在调用 dealloc 方法。
  • @akashg 当我在第二个视图控制器中并且我想回到游戏场景时,我已经这样做了。

标签: ios objective-c initialization sprite-kit skscene


【解决方案1】:

是的,首先创建一个创建场景并调用它的方法。如果您有属于属性的对象,请在调用场景创建方法之前将其从父对象中删除。

例子:

-(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];
}

【讨论】:

  • 您最好为您的场景使用一个复合层,并使用 SKNode 类的 removeAllChildren 方法删除所有子节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多