Cocos2d FPS падает при замене сцены, но сцена не сохраняется, и это с ARC

У меня есть MainMenuScene и GameScene...

В MainMenu у меня есть кнопка start, которая переходит в GameScene, посреди игры я хочу перезапустить или просто выйти из игры, что из тех 2, что я делаю, когда я заменяю GameScene на другую GameScene или просто захожу вернуться в главное меню, а затем снова вернуться в новую GameScene, FPS начинает падать и падать, если я делаю этот цикл 1 раз, FPS падает с 60 до 30, если я делаю это еще раз, FPS падает до 15, и так далее и так далее...

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

У кого-нибудь была эта проблема ... или кто-нибудь знает, что я могу делать неправильно? согласно тому, что я прочитал в методе ReplaceScene от CCDirector, эта сцена уничтожается и заменяется новой, поэтому проблем быть не должно.

== Забыл упомянуть: у меня есть слабая ссылка на GameLayer и GameScene в синглтоне. Однако, когда я заменяю сцену, сразу после этого я устанавливаю эти 2 нуля, хотя я не должен, потому что они слабая ссылка, но я сделай это на всякий случай.

Добавление изображения для большего контекста: Dealloc Debug

На изображении выше вы можете видеть, что каждый раз, когда вызывается ReplaceScene из CCDirector, сцены, в частности GameScenes, освобождаются. Так что утечка памяти - это не проблема, но кажется, что сцены не уничтожаются, или это мое мнение, потому что FPS просто продолжает падать и падать каждый раз.

1-я сцена GameScene будет заменена главным меню

MainMenuScene после замены сцены из GameScene

Вторая сцена GameScene заменена из MainMenuScene

2nd MainMenuScene после ReplaceScene из GameScene... Через несколько сцен замены...

Сцена 7-й GameScene заменена из MainMenuScene

Странно то, что MainMenu ВООБЩЕ не затрагивается, время рендеринга такое же... вызовы отрисовки те же (это понятно, даже в GameScene вызовы отрисовки остаются прежними.), но в GameScene FPS продолжает падать, а время рендеринга становится ОГРОМНЫМ, из-за чего игра становится невероятно медленной.

Будет продолжать проверять.


person S.H.    schedule 20.07.2013    source источник
comment
работает ли метод Dealloc сцены? Если нет, то протекает. Наиболее распространенной причиной является цикл сохранения, т. е. один узел содержит строгую ссылку на родительский или одноуровневый узел.   -  person LearnCocos2D    schedule 21.07.2013
comment
Дело в том, что это с ARC, поэтому дело не вызывается... и я не могу реализовать метод, когда он с ARC. И я проверил с помощью Xcode Profile Instruments, и утечек памяти не зарегистрировано.   -  person S.H.    schedule 21.07.2013
comment
@LearnCocos2D Плохо ... Я уже проверил только что, он освобождает объект. У меня есть изображение, которое я хотел бы загрузить, чтобы показать вам точку останова... но если она освобождается, то что происходит? почему у меня падает FPS?   -  person S.H.    schedule 21.07.2013
comment
вы тестируете на устройстве? с конфигом релиза? Вы также должны снова проверить с помощью инструментов, какие объекты все еще живы и увеличивается ли это число со временем. Создание все большего количества живых объектов не будет отображаться как утечка в Instruments, если они остаются живыми из-за сильной ссылки (например, массива в синглтоне).   -  person LearnCocos2D    schedule 21.07.2013
comment
все в порядке, я решил это :)   -  person S.H.    schedule 21.07.2013
comment
и не на реальном устройстве, а на симуляторе ... но реальное устройство будет иметь меньшее влияние, чем симулятор, но если в симуляторе это будет решено, то на реальном устройстве проблем не будет (надеюсь)   -  person S.H.    schedule 21.07.2013


Ответы (1)


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

Поэтому для всех, кто там, пожалуйста, не забудьте проверить, что ваши CCBatchNodes и любые другие сильные ссылки связаны со сценой, когда происходит замена сцены. Освобождение происходит почти сразу, но это помогает установить нулевые дочерние объекты освобождаемого родительского объекта. Но в моем случае SpriteBatchnode сильно повлиял на мой FPS, производительность времени рендеринга.

Благодаря LearnCocos2D ваша помощь очень ценится.

person S.H.    schedule 21.07.2013