0

我在我的“GameScene”中添加了一个额外的 CCLayer,[self addChild:_congratsScreen]只要我的角色在屏幕上收集给定数量的对象,它就会变得可见 ()。

在我的 GameScene.h 中,我声明了我的子层 ( CClayer *congratsScreen),并在我的 GameScene.m 上合成它。我在 GameScene 的init方法中分配子 CCLayer,因此它在此实例变量中持有对子层的引用。

在我的 GameScene 上,我有几个CCParticleSystemQuad实例,调用它们stopSystemresetSystem重放我的粒子动画非常简单,但是如果我尝试CCParticleSystemQuad在子层上初始化的那个上做同样的事情,resetSystem那么在我删除后它就不起作用我的 GameScene 中的孩子并将其重新添加回来。CCLayer 的组件从父层的场景中移除后会发生什么情况吗?

我目前没有代码,所以我将尝试编写一些伪代码来说明它是如何完成的:

它是如何在 ChildLayer.m 上初始化的:

_sparkling= [CCParticleSystemQuad particleWithFile:@"sparkling.plist"];

然后,在 GameScene.m 的某个地方,我有:

- (void) showCongrats {
  //pathetic way to create a modal panel
  [self setTouchable = NO];

  [[[self _congratsLayer] _sparkling] resetSystem];
  [self addChild:_congratsLayer];
}
- (void) hideCongrats {
  //let them continue playing
  [self setTouchable = YES];

  [[[self _congratsLayer] _sparkling] stopSystem];
  [self removeChild:_congratsLayer];
}

所以,它在我第一次调用时工作showCongrats,参考很好,我可以操纵粒子,但是一旦我隐藏图层,继续玩游戏并再次显示祝贺面板,它会显示粒子的冻结动画最后一次调用,resetSystem不再有效。有任何想法吗?

4

1 回答 1

1

我会在代码中添加一些断点并遍历它,但如果我不得不猜测,我会说当你调用 removeChild 时,你会丢失 init 方法中的数据,并且正在发生一些奇怪的事情。

于 2013-02-28T06:23:08.033 回答