У меня есть группа объектов CCSprite, которые все добавлены в пакетный узел в CCLayer. Эти спрайты должны обновлять свои позиции в методе обновления CCLayer. FPS - 60, а при сцене - 60, а затем резко падает до тех пор, пока он не достигнет 2 или 1 FPS! моего метод обновления (который работает в 60 раз в секунду) выглядит следующим образомiOS Cocos2d - FPS падает при перемещении многих спрайтов
-(void)update:(ccTime)delta {
for (int i = 0; i<spritesArray.count; i++) {
((CCSprite *)[spritesArray objectAtIndex:i]).position = ccp(..., ...);
}
}
Почему вы удивлены, увидев, что fps идут вниз, используя это? – Arbitur
Сколько спрайтов? Что произойдет, если вы вообще не запустите код обновления? PS: проигнорируйте начальный FPS, он принимает пару кадров для FPS, чтобы заселиться - это не означает, что слой нарисован на частоте 60 кадров в секунду, это означает, что счетчик FPS потребовался момент, чтобы отобразить фактический FPS. На самом деле это занимает больше времени медленнее, чем снимается сцена, и ниже 10 кадров в секунду все равно становится совершенно неточным (не так уж важно, поскольку любой игровой рисунок ниже 10 кадров в секунду не воспроизводится). – LearnCocos2D
Не все спрайты создаются в одно и то же время. Когда начинается сцена, запускается таймер, и каждый 1,0 интервал времени создается новым спрайтом. Я попытался создать их все сразу, когда начинается сцена, но никаких изменений в производительности. Причина, по которой я обновляю позиции спрайтов в методе обновления слоя, а не только CCMove-ing их при создании, заключается в том, что их траектории движения являются синусоидальными/косинусовидными волнами с различными амплитудами и длинами волн. – mim