Cocos2d:粒子.autoRemoveOnFinish不释放内存

发布于 2024-12-16 23:48:19 字数 360 浏览 2 评论 0原文

我通过以下方式创建粒子效果:

CCParticleSun* p = [[CCParticleSun alloc]initWithTotalParticles:5000];
p.autoRemoveOnFinish = YES;
//more parameters
p.duration = 1;

并将其添加到我的场景中:

[self addChild:p z:self.zOrder+1];

每次创建此粒子效果时,都会分配 3MB 内存,但从未释放。 我做错了什么?我需要手动释放粒子系统吗?

NSZombies 被禁用,因此它不会意外地保留在内存中。

I create a particle effect in the following way:

CCParticleSun* p = [[CCParticleSun alloc]initWithTotalParticles:5000];
p.autoRemoveOnFinish = YES;
//more parameters
p.duration = 1;

and add it to my scene:

[self addChild:p z:self.zOrder+1];

Every time I create this particle effect, 3MB of memory are allocated, but never released.
What am I doing wrong? Do I have to manually release the particle system?

NSZombies are disabled, so it's not kept in memory by accident.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

好多鱼好多余 2024-12-23 23:48:19

您分配(或保留)的所有内容也必须释放。对于Cocos2D,最简单的方法是将其变成一个自动释放对象,如下所示:

CCParticleSun* p = [[CCParticleSun alloc]initWithTotalParticles:5000];
[p autorelease];
p.autoRemoveOnFinish = YES;
p.duration = 1;

然后它会在Cocos2D 清理场景后被释放。

PS: 5000 个粒子是一个巨大的粒子量!难怪您会看到大小为几兆字节的分配。最多尝试500,
如果您使用大约 32x32 像素或更大的粒子纹理,则为 100 或更少。

Everything you alloc (or retain) you have to release as well. For Cocos2D it's easiest to turn it into an autorelease object like this:

CCParticleSun* p = [[CCParticleSun alloc]initWithTotalParticles:5000];
[p autorelease];
p.autoRemoveOnFinish = YES;
p.duration = 1;

Then it will be released after Cocos2D cleans up your scene.

PS: 5000 particles is a GIGANTIC amount of particles! No wonder you're seeing allocations of several megabytes in size. Try going for 500 at most,
100 or less if you're using particle textures that are about 32x32 pixels or greater.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文