如何释放cocos2d对象



我正在做以下

-(void)Play {
[CCDirector setDirectorType:kCCDirectorTypeDisplayLink];
CCDirector *director = [CCDirector sharedDirector];
//[director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:NO];
CGRect rect = CGRectMake(0, 0, 320, 480);
EAGLView *glView = [EAGLView viewWithFrame:rect
                                   pixelFormat:kEAGLColorFormatRGB565   // kEAGLColorFormatRGBA8
                               depthFormat:0                        // GL_DEPTH_COMPONENT16_OES
                    ];
[director setOpenGLView:glView];
[window addSubview:glView];
[window makeKeyAndVisible]; 
[director setDisplayFPS:YES];
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];  
CCScene *scene = [CCScene node];
CCLayer *layer = [PongLayer node];
[scene addChild :layer];
[[CCDirector sharedDirector] runWithScene: scene];
 }

在将图层添加到场景后,我可以去看PongLayer的屏幕,但现在当你从开始游戏的地方回到主屏幕时,如何摧毁它的对象

我确实更改了层,但前一层正在后端工作,比如如果我确实放置了一些NSLog,我可以在运行条件下看到该日志,那么该怎么办?

因为当我再次调用play方法时,我不想刷新我的所有数组和新场景的所有数据。

像CCLayer和CCSprite这样的Cocos2d对象被编码为自动发布对象。

您将看到"node"方法在创建对象时分配inits并自动释放对象。

诸如"spriteWithFile:"one_answers"layerWithColor:"之类的方法也使用autoreleased进行编码。

当您将对象作为子对象添加到层或任何其他节点时,它会创建一个指向该对象的指针,并保留该对象。当对象作为子节点删除时,它将自行解除分配。

因此,当您从一个场景移动到另一个场景时,被移除的场景会解除分配它的子对象(层),然后它们会依次释放它们的子对象。

http://www.cocos2d-iphone.org/wiki/doku.php/start

唯一的例外是当你创建这样的精灵时。。

CCSprite *mySprite = [CCSprite alloc] init];

你已经亲自分配并初始化了这个精灵,你必须释放它。

如果您打开了CCLog,它会在CCSprite被释放时注销。

另一件值得一提的小事是,如果你"推动"场景,场景不会自行解除分配,只是弹出并替换场景的原因1来解除分配。

最新更新