我正在用cocos2d写一个游戏。我在AppDelegate类中使用函数restartDirector。 - (无效)restartDirector {
[[CCDirector sharedDirector] end];
[[CCDirector sharedDirector] release];
if( ! [CCDirector setDirectorType:CCDirectorTypeDisplayLink] )
[CCDirector setDirectorType:CCDirectorTypeDefault];
[[CCDirector sharedDirector] setPixelFormat:kPixelFormatRGBA8888];
[CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
[[CCDirector sharedDirector] setAnimationInterval:1.0/60];
[[CCDirector sharedDirector] setDisplayFPS:YES];
[[CCDirector sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeLeft];
[[CCDirector sharedDirector] attachInView:window];
}
我在游戏场景中调用了这个函数。
-(void)PracticeMethod:(id)sender
{
[MY_DELEGATE restartDirector];
CCScene *endPageScene = [CCScene node];
CCLayer *endPageLayer = [DummyScene node];
[endPageScene addChild:endPageLayer];
[[CCDirector sharedDirector] runWithScene:endPageScene];
// [[CCDirector sharedDirector] replaceScene:endPageScene];
}
当使用replaceScene时,游戏中没有问题,但是abject分配的内存很高(我在泄漏工具中检查过)。 所以我使用了runWithScene。 但是,当场景DummyScene加载精灵时使用这些精灵,其中的标签由白框显示。我看不到精灵和标签。 如果我使用replaceScene一切正常,但内存分配很高。 这是我的问题。
alt text http://www.freeimagehosting.net/uploads/05c6b3e661.png
谢谢。
答案 0 :(得分:0)
您应该只对显示的第一个场景使用runWithScene。这通常在AppDelegate中完成。必须使用replaceScene完成所有进一步的场景更改。
请记住,当您执行replaceScene时,两个场景将同时在内存中。除非您使用间歇性的“加载场景”,否则您将看到内存使用量激增。
此外,检查场景的dealloc方法是否被调用。在那里设置一个断点,或者至少添加一个CCLOG语句。如果在替换场景后没有调用dealloc方法(并且任何转换已经结束),那么你正在泄漏场景,你需要找到你要离开的场景中的原因。