我正在做如下
-(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方法时,我不想刷新所有数组和新场景的所有数据。
答案 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来解除分配。