Я недавно обновился до Cocos2d 2.0. До этого моя игра работала нормально, а частота кадров стабильно составляла 60 кадров в секунду. После обновления до 2.0 и изменения некоторого кода на новую версию я понял, что, играя в игру примерно 3-4 минуты, частота кадров падает до 50, а не примерно до 40.
Я обнаружил некоторые ошибки в своем коде, например, ошибочное отключение некоторых спрайтов, но падение FPS все еще сохранялось.
Я постоянно создаю спрайты и удаляю спрайты из сцены. После каждого раунда в игре я удаляю элементы экрана и создаю их снова для нового раунда. Почти все элементы анимированы, и я останавливаю все действия перед удалением их со сцены.
Я обнаружил, что если удалить сцену и запустить ее снова, частота кадров в секунду вернется в норму.
Что я делаю не так? Я пробовал несколько возможных решений, но не могу найти причину маршрута.
Кто-нибудь может здесь помочь?
О, я забыл упомянуть, что код работал нормально в версии Cocos2d 1.x. Я никогда не замечал падения FPS с таким же кодом.
1 ответ
Отладка или выпуск? Устройство или симулятор? ---> Измеряйте производительность только в сборках релизов на устройстве.
Из описания это очень похоже на утечку памяти, когда вы либо все больше и больше используете память, либо все больше и больше узлов не освобождаются, что означает, что они могут продолжать работать. Возможно даже нарисовать за кадром.
Есть много причин, по которым одна версия работает нормально, а другая нет, и кто должен сказать, что эта ошибка - просто новая ошибка, появившаяся в процессе перехода. Я бы начал с простого теста: все ли узлы сцены запускают свой метод dealloc, когда вы их удаляете? В противном случае у вас есть утечка памяти, возможно, цикл сохранения. Простое изменение API-интерфейса cocos2d с присвоения свойства на свойство сохранения - все, что требуется, чтобы вызвать нечто подобное.
Затем проверьте «Инструменты», чтобы узнать, где именно происходит утечка памяти.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.