Cocos2d странное случайное замораживание - какого чёрта происходит? - PullRequest
0 голосов
/ 26 декабря 2011

Эта проблема сводила меня с ума, уже 5 дней я пытаюсь ее решить.Вот я, отчаянно нуждающийся в решении.

Я занимаюсь разработкой простой игры на Cocos2d.Циклический метод: - (void) update: (CCTime) delta вызывается каждый конкретный интервал времени.

Эта вещь начала происходить всего 5 дней назад, и бог знает почему.В любой случайной точке в середине игрового цикла, примерно через 10 секунд (может варьироваться от 5 до 20 секунд) после начала игрового цикла, он просто остановится без видимой причины.Инструменты ничего не обнаружат, отладчик ничего не заметит.Все, что я заметил, это то, что цикл перестает вызываться.Нет проблем с памятью, или что-нибудь связанное с этим.

Не существует какого-либо специального метода, который бы вызывал это замораживание, который является абсолютно случайным.То же самое происходит на iPhone, iPad, iPod touch, если это единственное приложение, запущенное или нет, и на его iOS 4.0 или 5.0 ... Нет абсолютно никаких утечек, обнаруженных в инструментах, и никаких объектов Zombie.

Повторяю, это не сбой, а просто зависание в игровом цикле.PS: музыка по-прежнему работает в фоновом режиме, хотя графика заморожена.

Я на Xcode 4.2 с iOS 5.0 и Cocos2d 1.0.1, запускаю игру на iPad 1, iPhone 4, 3GS и iTouch 3gвсе они на iOS 5.0.1.Та же заморозка ....

Есть идеи?ПОЖАЛУЙСТА, ПОМОГИТЕ!

Ответы [ 2 ]

0 голосов
/ 31 декабря 2011

Что ж, я знаю надежный способ «остановить» всю графическую обработку с помощью кокоса (версия 99.4), в то время как механизмы обработки касаний все еще отлично работают. Я только что вернулся в более старую версию проекта, и вот оно:

NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setObject:nil forKey:@"key"];

Я только что добавил этот метод в одну из сцен завершения боя и выхода из сцены, и, конечно же, достаточно. То, что я получаю, это мертвый ларек, не исключение, музыка и сенсорная обработка все еще работают. Журнал по-прежнему показывает, что мои процедуры сенсорной обработки обрабатываются и перезваниваются. Это заставило меня долго топать, и теперь я «выкрикиваю» себя из такой же очевидной ошибки. Если что-то подобное происходит в одном из ваших потоков, приложение выдаст вам «стоп-кадр». Надеюсь, ты сможешь найти причину.

0 голосов
/ 26 декабря 2011

Поиск любых случаев отправки сообщений методам, имя которых начинается с "unschedule".

Если это не помогает, установите точку останова в классе CCScheduler в методе "tick", как только произойдет остановка. Если CCScheduler не «тикает», выясните, почему. Если он все еще отмечен галочкой, проверьте, есть ли в его списках селекторы. Для этого вам может потребоваться установить точки останова во всех «внеплановых» методах класса CCScheduler, чтобы узнать, кто и почему не планирует методы.

...