Освободить новый объект после действия

В моей игровой сцене я порождаю шары из класса шариков, которые перемещаются случайным образом с действием 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);

Некоторые шары остановятся случайно. Я думаю, что они перезаписывают память друг друга, когда появляются.

Спасибо

1

Решение

Ваша проблема, кажется, в том, что ваша переменная стека выходит из области видимости, если runAction это асинхронный вызов:

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;
}

Я настоятельно рекомендую прочитать Выделение памяти в Cocos2d-x

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]