我在我的“GameScene”中添加了一个额外的CCLayer,只要我的角色在屏幕上收集了一定数量的对象,它就会变得可见([self addChild:_congratsScreen]
)。
在我的GameScene.h中,我已经声明了我的子图层(CClayer *congratsScreen
),我正在我的GameScene.m上合成它。我在GameScene的init
方法中分配子CCLayer,因此它在此实例变量中保存对子层的引用。
在我的GameScene上我有几个CCParticleSystemQuad
个实例,调用stopSystem
和resetSystem
来重放我的粒子动画非常简单,但如果我尝试做同样的事情在子图层上初始化的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
不再有效。有什么想法吗?
答案 0 :(得分:1)
我会在代码中添加一些断点并浏览它但是如果我不得不猜测我会说当你调用removeChild时你会丢失你在init方法中的数据,并且会发生一些时髦的事情。