2011-06-21 19 views
0

私はシーンにレイヤーを追加した後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を実行している状態でログを見ることができますか?

再生メソッドを再度呼び出すと、すべての配列と新しいシーンのすべてのデータをリフレッシュする必要がないためです。

答えて

3

CCLayerやCCSpriteなどのCocos2dオブジェクトは、自動リリースオブジェクトとしてコードされています。

'node'メソッドのallocがオブジェクトの作成時にinitsおよびautoreleasesすることがわかります。

「spriteWithFile:」や「layerWithColor:」などのメソッドも、オートリリースされています。

オブジェクトをレイヤーまたは他のノードに子として追加すると、それを保持するオブジェクトへのポインタが作成されます。オブジェクトが子として削除されると、オブジェクトは自身を解放します。

シーンからシーンに移動すると、削除されたシーンはその子(レイヤー)の割り当てを解除し、子ども(スプライト)も割り当てを解除します。

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

あなたはこのようなスプライトを作成するときに唯一の例外は..です

CCSprite *mySprite = [CCSprite alloc] init]; 

あなたが個人的に割り当てられ、このスプライトを初期化している、あなたはそれを解放する必要があります。

CCLogがオンになっていると、CCSpritesの割り当てが解除されたときにログアウトします。

シーンの「プッシュ」してシーンの原因1を置き換えて置き換えるだけで、シーンの割り当てが解除されます。

+0

私は上に移動するためにccspiritを使用していますので、どのように削除することができますか... –

+0

スプライトの位置を確認し、スケジューラで設定し、xまたはyのときスプライトを削除するメソッドを作成します十分である。 – Bongeh

関連する問題