Я недавно обновился до Cocos2d 2.0. До этого моя игра работала нормально, а частота кадров стабильно составляла 60 кадров в секунду. После обновления до 2.0 и изменения некоторого кода на новую версию я понял, что, играя в игру примерно 3-4 минуты, частота кадров падает до 50, а не примерно до 40.

Я обнаружил некоторые ошибки в своем коде, например, ошибочное отключение некоторых спрайтов, но падение FPS все еще сохранялось.

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

Я обнаружил, что если удалить сцену и запустить ее снова, частота кадров в секунду вернется в норму.

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

Кто-нибудь может здесь помочь?

О, я забыл упомянуть, что код работал нормально в версии Cocos2d 1.x. Я никогда не замечал падения FPS с таким же кодом.

1
Endre Olah 13 Сен 2012 в 00:57

1 ответ

Лучший ответ

Отладка или выпуск? Устройство или симулятор? ---> Измеряйте производительность только в сборках релизов на устройстве.

Из описания это очень похоже на утечку памяти, когда вы либо все больше и больше используете память, либо все больше и больше узлов не освобождаются, что означает, что они могут продолжать работать. Возможно даже нарисовать за кадром.

Есть много причин, по которым одна версия работает нормально, а другая нет, и кто должен сказать, что эта ошибка - просто новая ошибка, появившаяся в процессе перехода. Я бы начал с простого теста: все ли узлы сцены запускают свой метод dealloc, когда вы их удаляете? В противном случае у вас есть утечка памяти, возможно, цикл сохранения. Простое изменение API-интерфейса cocos2d с присвоения свойства на свойство сохранения - все, что требуется, чтобы вызвать нечто подобное.

Затем проверьте «Инструменты», чтобы узнать, где именно происходит утечка памяти.

1
CodeSmile 13 Сен 2012 в 01:19
Наконец, я решил все проблемы, и, как вы сказали, главной причиной были утечки памяти. Я пытался использовать хороший эффект для очков, заработанных сбором некоторых предметов, и решил это неправильно. Были и другие проблемы, которые могли повлиять на игру, когда кто-то пытался запустить несколько раундов друг за другом. В основном вывод состоит в том, что ВНИМАТЕЛЬНО СОХРАНЯЙТЕ В COCOS2D. Спасибо за помощь.
 – 
Endre Olah
16 Сен 2012 в 15:04