2016-09-27 10 views
1

私のゲームシーンでは、MoveByアクションでランダムに移動するボールクラスからボールを​​生成します。私の質問は、MoveToアクションが終了した後、どのようにボールを放つのですか?以下の私のコードを参照してください:アクション後に新しいオブジェクトを解放します

//GameScene class 
... 

Ball *ball = new Ball(); //<----need to release this after action is over 
ball->spawnBall(this); 

... 


//Ball class 
... 

void Ball::spawnBall(cocos2d::Layer *layer){ 

ball = Sprite::create(); 
layer->addChild(ball); 
auto action = Sequence::create(MoveBy::create(...)), RemoveSelf::create(), null); 
ball->runAction(action); 

} 

私は自動リリース(スタック)を使用して見つけたので、私はそれのメモリ(ヒープ)の制御を持ちたい:

Ball ball; 
    ball.spawnBall(this); 

ボールの一部がランダムに停止します。私は彼らが生まれたときにお互いの記憶を上書きしていると思っています。私は非常に

int GameScene::func() 
{ 
Ball ball; 
ball.spawnBall(this); 
return 0; //ball is automatically deleted here 
} 

あなたは

int GameScene::func() 
{ 
Ball *ball = Ball::create(); //dont use new here, use create() function here and autorelease 
ball.spawnBall(this); 
//autorelease here 
return 0; 
} 

ことができるようになります。

+0

あなたが知っていますか?それを使用し終わった後に 'release'を呼び出すと(' autorelease'を介して)自動的に解放されるはずです(保持カウントが0になるので)? – PnotNP

+0

ええ、私はcreate()メソッドが自動的に解放されることを知っています。しかし、私はこれが私の問題を解決するかどうかはわかりません。例を教えてください。ありがとう – ctapp1

答えて

0

あなたの問題はrunActionが非同期呼び出しであれば、あなたのスタック変数がスコープ外に起こっていることのようです

感謝読書をお勧めしますMemory deallocation in Cocos2d-x

+0

私は取得しています:解放されたオブジェクトのチェックサムが正しくありません。オブジェクトはおそらく解放された後に変更されました。今度は、このfuncを繰り返し呼び出して、多くのボールを画面に表示しています。また、私はintの代わりにvoidを使用しているので、(Ball *)Ball :: create(); – ctapp1

+0

お試しいただきありがとうございます – ctapp1

関連する問題