Застревать на 40 кадрах в секунду даже с использованием CADisplayLink? - PullRequest
4 голосов
/ 01 января 2011

Сначала я использовал NSTimer и столкнулся с проблемой зависания частоты кадров при 40 кадрах в секунду. Я читал об использовании CADisplayLink для решения проблемы. Казалось, какое-то время оно работало, но в последнее время приложение запускается с 60, затем через некоторое время (примерно через 5-20 секунд) приложение начинает работать со скоростью 40 - 41 кадр / с и застревает там. И я выбрал, чтобы было меньше дро, когда объекты не видны, но все же они там застряли. Необычный способ, который, кажется, решает проблему на мгновение (около 10 секунд), состоит в том, чтобы отсоединить провод от нижней части iphone, а затем снова подключить его. Очевидно, что это не идеально, но просто интересно, почему это происходит и почему это несколько исправляет, как будто оно сбрасывает определенные значения или что-то в этом роде. Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 3 ]

4 голосов
/ 01 января 2011

Вы проверили, действительно ли вы сбрасываете кадры? Используете ли вы процессор / графический процессор до такой степени, что вы можете рисовать только 40 кадров в секунду, или это проблема где-то в программном обеспечении?

Помните, что если CADisplayLink не может запустить обновление экрана (из-за того, что основной поток занят такими вещами, как рисование предыдущего кадра), он может пропустить его, так как у него не будет достаточно времени для завершения , Поэтому, если для рисования некоторых из ваших кадров требуется больше 0,01666 ... секунд, вы пропустите интервал для рисования кадров сразу после этого, и замедление может показаться хуже, чем есть.

Также помните, что мобильное устройство не всегда способно рисовать все быстро. Процессор A4 в iPhone 4 очень хорош, но это все еще высокий заказ, чтобы заполнить 960x640 пикселей экрана 60 раз в секунду. Подавляющее большинство ваших пользователей не заметят, если ваша частота кадров составляет 40 кадров в секунду вместо 60 кадров в секунду - человеческий глаз обычно не замечает дрожание или задержку экрана, пока вы не достигнете 20 кадров в секунду и ниже.

3 голосов
/ 14 июня 2011

У меня та же проблема с 3G. Я упростил свое приложение до счетчика FPS, нарисованного над пустым (розовым) буфером, и тем не менее он составил 40 кадров в секунду.

После некоторого поиска в Google я нашел очень похожую проблему, обсуждаемую на форуме cocos2d-iphone.org.

Решением было отключить автоповорот контроллера вида. Поэтому я сделал, что мой shouldAutorotateToInterfaceOrientation всегда возвращает NO, и это сработало (!!!). У меня были стабильные 60 FPS. Затем я вернул свою простую игровую графику обратно, и она была стабильной 60 FPS. Но моя игра должна работать в ландшафтном режиме и в настоящее время работает в портретном режиме по умолчанию.

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

0 голосов
/ 09 февраля 2011

Та же проблема здесь.У меня есть очень простое представление openGL (вращающийся куб), оно начинается со скорости 60 кадров в секунду, как только я запускаю тяжелую задачу, чтобы немного замедлить его, оно никогда не достигнет 60 кадров в секунду после, и его скорость останется равной 40 кадр / с.Я использую CADisplayLink, и он просто запускается в тестовом приложении, практически ничего не делая, экспериментируя с этой проблемой: /

Если у кого-то есть решение, я был бы очень благодарен.

...