gpt4 book ai didi

iphone - cocos2d ccArray 删除对象很慢

转载 作者:行者123 更新时间:2023-11-30 16:04:29 24 4
gpt4 key购买 nike

我正在为我的游戏制作一个粒子系统,它基本上是我的游戏中从火箭中冒出的烟雾。所有粒子都位于称为“烟雾”的 ccArray 中。

ccArray *smoke = ccArrayNew(0);

我有一个名为 Smoke 的类,它是 CCSprite 的子类,并添加了一个名为 __opacity 的 ivar。

当我向 ccArray 添加新烟雾时,我会这样做:

ccArrayAppendObject(smoke, [Smoke spriteWithFile: @"smoke.png"]);
[smoke->arr[smoke->num - 1] setupWithTouch: touch andOpacity: 255.0f];
[self addChild: smoke->arr[smoke->num - 1]];

一点也不滞后,而且速度很快

这就是我处理每一帧烟雾的方式:

if(smoke->num > 0)
{
for(NSUInteger i = 0; i < smoke->num; i++)
{
Smoke *s = smoke->arr[i];

s.__opacity = s.__opacity - 255.0f * delta;

[s setOpacity: s.__opacity];

if(s.__opacity <= 0.0f)
{
[self removeChild: s cleanup: YES];
ccArrayFastRemoveObjectAtIndex(smoke, i);
}
}
}

当不透明度小于0时,我们将烟雾从场景中移除,然后

将其从数组中删除——这是减慢游戏速度的部分,将其从数组中删除。当场景中有 60 个烟雾颗粒时,它会从 60 FPS 变为 15-20 FPS。

有什么想法可以加快速度吗?

此外,我使用 ccArray 而不是 NSMutableArray 的原因是因为我读取 ccArray 更快。

最佳答案

从数组(任何数组)的中间或开头删除对象将重新创建数组,并且操作非常慢(成员的分配+复制),如果您有许多删除的数据结构而不是在您的末尾可能应该使用链接列表

这是我在互联网上找到的一些实现(尚未测试,但看起来不错) http://www.cocoadev.com/index.pl?DoublyLinkedList

关于iphone - cocos2d ccArray 删除对象很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998594/

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