我对Cocos2D有疑问。我在游戏中有两个场景都有很多精灵。当我替换一个场景并加载另一个场景时发生了什么?是否所有的精灵都被自动删除,或者它正在记忆中,并且当我在场景中释放时会被释放?
我无法理解这个事情如何在这种情况下管理内存,所以任何人都可以向我解释这个事情,更重要的是,当我们在场景中加载精灵时,这对我们来说很重要。
答案 0 :(得分:6)
当您调用replaceScene时,两个场景都会在内存中存在一段时间!如果您使用CCSceneTransition,则两个场景将在转换期间在内存中。
流程如下:
您可以在更改场景之前在场景中实现-(void) cleanup
方法以删除其大部分内容,并且您可能希望将新内容加载到-(void) onEnter { [super onEnter]; }
方法。
我个人认为在这种情况下更好的方法是“加载”场景,这两个场景之间的场景(甚至可能不会活动超过几毫秒)。这使得第一个场景时间在初始化下一个场景之前被释放。
答案 1 :(得分:0)
所有精灵都会在新场景加载到内存后释放。除非你保留了精灵。
答案 2 :(得分:0)
如果您正在做的是
CCSprite* sprite = [CCSprite spriteWithFile:@"test.png"];
当你切换/转换场景时,没有任何保留或任何幻想,这个场景的所有孩子(在这个例子中,精灵,将自动释放。你没有取得对象的所有权。
但是如果你说你是否拥有对象的所有权,例如:
hero = [[CCSprite spriteWithFile:@"hero.png"] retain];
// or
hero = [[CCSprite alloc] initWithFile:@"hero.png"];
然后你需要在你的dealloc中释放它