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