cocos2d постепенное падение кадров в секунду

#objective-c #cocos2d-iphone #box2d #objective-c

#objective-c #cocos2d-iphone #box2d #objective-c

Вопрос:

Привет, я использую cocos2d, box2d и несколько систем частиц на iPhone 4.
Я завершил свой первый уровень, на котором также выделено множество спрайтов.
Я установил свой предел кадров в секунду на 30 кадров в секунду.
При первом запуске игра работает хорошо, со скоростью 30 кадров в секунду. Это продолжается около 3-4 минут плавного игрового процесса.
Но через некоторое время частота кадров в секунду начинает падать, и она переходит в постепенное снижение, пока не достигнет отметки 12 кадров в секунду.

Я помню, что у меня была эта проблема с предыдущей игрой, которую я забросил.
Вызвано ли это утечкой памяти, возможно, из-за того, что элементы не были освобождены??

В моих методах освобождения (void) я ввожу все мои выделенные релизы, мог ли я пропустить один? Или есть какая-то другая возможность, которую я не рассматриваю?

Спасибо!

Комментарии:

1. Попробуйте использовать инструменты — cimgf.com/2008/04/02 /…

2. Возможно, это вызвано системой частиц. можете ли вы опубликовать свой код частиц…

Ответ №1:

Похоже, у вас заканчиваются ресурсы. Я бы попробовал инструменты, предложенные SB. Приборы могут проверять наличие утечек с помощью инструмента распределения. Вы также могли бы попробовать пакет профилирования OpenGL.

Комментарии:

1. Да, похоже, вы правы. У меня 3 утечки памяти: GeneralBlock-512 GeneralBlock-512 и NSConcreteMapTable. Общее количество утекших байтов бесконечно, это не прекращается!! Не уверен, как это исправить, но я поиграю.

2. В инструменте распределения вы можете отслеживать историю выделения / сохранения / освобождения / автоматического выпуска для каждого выделенного объекта. Вы можете увидеть трассировку стека для каждого события. Это может привести вас непосредственно к коду-нарушителю.

Ответ №2:

У меня та же проблема, и я не могу получить разрешение. Когда я выгружаю всю сцену и перезагружаю ее снова, все возвращается в нормальное русло. Так что, похоже, где-то произошла утечка, но даже с помощью инструментов я не могу найти ее источник.

Общее использование памяти не растет, утечек не зарегистрировано, поэтому у меня такое ощущение, что что-то в Cocos2d или в Chipmunk увеличивает нагрузку.

Я использую спрайты, которые случайным образом появляются на экране и исчезают с него, и каждый раз создаю и уничтожаю их. Может ли быть так, что что-то выпущено неправильно и Cocos или Chipmunk все еще вычисляют с этими элементами?

Комментарии:

1. убедитесь, что вы не постоянно перераспределяете CCActions в игровом цикле. Это была моя проблема

2. Спасибо, я делаю это в коде, но я думал, что полное освобождение элемента приведет к освобождению связанных действий. Я постараюсь выполнить действия заранее и просто использовать их там, где это необходимо. Давайте посмотрим.

3. Привет, Оливер, я нашел проблему. Я пытался повторно использовать действия и анимации, помещая их в сохраненную переменную и используя их в другом объекте. Основываясь на вашем предложении, я перекодировал всю игру, создав и используя действия и анимацию там, где они необходимы. Частота кадров стабильно составляет 60 кадров в секунду, даже когда я создаю 10-12 новых объектов почти одновременно. Я уничтожил все свои «сохранения», поскольку они создавали утечки памяти. Наконец-то все, кажется, идеально. Еще раз спасибо.