gpt4 book ai didi

c++ - Action 后释放新对象

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:24 25 4
gpt4 key购买 nike

在我的游戏场景中,我从使用 MoveBy Action 随机移动的球类生成球。我的问题是,在 MoveTo Action 结束后如何释放球?请参阅下面的代码:

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

我强烈建议通读 Memory deallocation in Cocos2d-x

关于c++ - Action 后释放新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39715715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com