как освободить объекты cocos2d? - PullRequest
0 голосов
/ 21 июня 2011

Я делаю следующее

-(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 Ответ

3 голосов
/ 21 июня 2011

Объекты Cocos2d, такие как CCLayer и CCSprite, закодированы как объекты автоматического освобождения.

Вы увидите, что метод 'node' выделяет и автоматически высвобождает объект при его создании.

Такие методы, как «spriteWithFile:» и «layerWithColor:», также закодированы с помощью автоматического освобождения.

Когда вы добавляете объект в качестве дочернего к слою или любому другому узлу по этому вопросу, он создает указатель на объектсохраняя это.Когда объект удаляется как дочерний, он освобождает себя.

Таким образом, когда вы перемещаетесь из Сцены в Сцену, удаляемая сцена освобождает своих детей (слои), а они, в свою очередь, своих детей (спрайты)..

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

Единственное исключение - это когда вы создаете такой спрайт, как этот ..

CCSprite *mySprite = [CCSprite alloc] init];

Вы лично распределили и инициализировали этот спрайт, вы должны освободить его.

Если у вас включен CCLog, он выходит из системы при освобождении CCSprites.

Еще одна маленькая вещьСтоит отметить, что Сцена не освободит себя, если вы «нажмете» на сцену, только выдвинув и заменив причину сцены 1 для освобождения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...