Я создаю систему частиц для своей игры, которая в основном состоит из дыма от ракет в моей игре.Все частицы находятся в ccArray, называемом smoke.
ccArray *smoke = ccArrayNew(0);
У меня есть класс Smoke, который является подклассом CCSprite, с добавлением ивара под названием __opacity.
Когда я добавляюновый дым в 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 FPS до 15-20 FPS, когда на сцене около 60 частиц дыма.
Есть идеи, как мне это ускорить?
Кроме того, почему яиспользование ccArray вместо NSMutableArray объясняется тем, что я читаю ccArray быстрее.