NSTimer Lag - iPhone SDK - PullRequest
       0

NSTimer Lag - iPhone SDK

0 голосов
/ 15 июня 2010

Я сделал игру, которая использует много таймеров в коде. Однако таймер должен справиться со многими задачами за такое небольшое количество времени, что приводит к проблеме, в которой есть задержка в моей игре. Например, мой таймер работает с интервалом (0,05), и он должен рисовать и обновлять многие изображения на экране. Можно ли как-то распределить рабочий процесс, чтобы программа работала намного плавнее?

Спасибо

Kevin

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

Я бы использовал NSThread вместо NSTimer. Я добился большего успеха в этой области, используя NSThread, потому что он работает в независимом потоке и не запускается из основного потока пользовательского интерфейса. В цикле для нити спите это за 1/20 (ваши 0,05) секунды. Поскольку поток не выполняется в потоке пользовательского интерфейса, все его задачи не должны замедлять ваш пользовательский интерфейс. Однако, поскольку он не запущен в пользовательском интерфейсе, вам придется вызвать performSelectorOnMainThread, чтобы пользовательский интерфейс обновился из этого фонового потока. Я установил блокировку на свой метод обновления (простой логический), который говорит, что если последнее обновление пользовательского интерфейса не произошло, просто пропустите этот. тогда, если у меня заканчивается время обработки, я просто опускаю кадр или два здесь и там. Я также проверяю, действительно ли что-то изменилось, прежде чем я перерисовываю.

0 голосов
/ 05 мая 2013

Простое решение: Ditch NSTimer.

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

И да, убедитесь, что вам не нужно перерисовывать, как сказал Аран Малхолланд выше.Просто убедитесь, что проверки не занимают столько времени, сколько перерисовка.

И не забудьте оптимизировать свой код.Много.Используйте ivars для доступа к объектам, но все свойство (self.myObject =) для установки ваших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...