如何发布cocos2d对象?

时间:2011-06-21 11:27:41

标签: iphone cocos2d-iphone

我正在做如下

-(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方法时,我不想刷新所有数组和新场景的所有数据。

1 个答案:

答案 0 :(得分:3)

Cocos2d对象(如CCLayer和CCSprite)被编码为自动释放对象。

你会看到'node'方法分配了inits并在创建对象时自动释放它。

'spriteWithFile:'和'layerWithColor:'等方法也使用自动释放进行编码。

当您将对象作为子项添加到Layer或任何其他节点时,它会创建一个指向该对象的指针,并保留该对象。当子对象被移除时,它会自行释放。

因此,当您从“场景”移动到“场景”时,删除的场景会释放它的子项(图层),然后再将它们的子项(精灵)释放。

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

唯一的例外是你创建这样的精灵..

CCSprite *mySprite = [CCSprite alloc] init];

您已亲自分配并初始化此精灵,您必须将其释放。

如果您打开了CCLog,它会在取消分配CCSprites时注销。

另一个值得一提的小事,如果你'推'场景,场景不会解除分配,只会弹出并取代场景的原因1来解除分配。