Я создаю систему частиц для своей игры, которая в основном представляет собой дым, выходящий из ракет в моей игре. Все частицы находятся в ccArray, называемом дымом.cocos2d ccArray remove object is slow
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 быстрее.
Смотри также: http://www.learn-cocos2d.com/2010/09/array-performance-comparison-carray-ccarray-nsarray-nsmutablearray/ – LearnCocos2D