На самом деле есть несколько причин такого поведения, и это не только cocos2d, но и эффект, наблюдаемый в любом игровом движке в средах с вертикальной синхронизацией (VSYNC) включен. На iOS VSYNC всегда включен, на ПК у вас обычно есть возможность отключить его, чтобы улучшить частоту кадров, если она постоянно ниже частоты монитора за счет разрыв экрана. Обычно ЖК-дисплеи, такие как устройства iOS, обновляют свой дисплей с частотой 60 Гц, обеспечивая максимальную скорость 60 кадров в секунду.
Cocos2D 1.x по умолчанию использует класс CADisplayLink для обновлений, Cocos2D 2.x использует исключительно CADisplayLink. CADisplayLink синхронизирует обновления с частотой обновления экрана. Это означает, что уведомление отправляется, когда экран закончил рисовать свое содержимое.
Когда вы получаете 60 кадров в секунду, все в порядке. Но если игре не удается вовремя отрендерить кадр для рендеринга 60 кадров в секунду, она получит следующее обновление только после завершения следующего обновления экрана. Это эффективно уменьшает частоту кадров вдвое, как только частота кадров падает чуть ниже 60 кадров в секунду — или, другими словами, как только ваш цикл обновления и рендеринга занимает больше 16,666 миллисекунд. Это означает, что вы можете иметь только дискретные частоты кадров 60, 30, 20 и 15 кадров в секунду (60, разделенные на 1, 2, 3 и 4) на iOS с обновлениями CADisplayLink.
Эффект весьма заметен, потому что частота кадров, которая колеблется между 60, 30, 20 и 15 кадрами в секунду — даже всего на долю секунды — не кажется плавной, главным образом потому, что она такая неустойчивая — неустойчивость — это то, что мы замечаем как «негладкое». ". Если это влияет на вашу игру, вы можете обнаружить, что ограничение частоты кадров до 30 кадров в секунду на самом деле сделает игру более плавной. У вас также есть больше времени для обновления и рендеринга между кадрами.
Стабильность частоты кадров фильма 24 кадра в секунду считается «плавной», но режиссеры также научились избегать сцен, в которых ограниченная частота кадров становится слишком очевидной. Например, они чертовски избегают того, что очень часто делают игры: прокрутки вбок, то есть бокового движения камеры или бокового движения объектов, проходящих мимо камеры.
Вы удивитесь, насколько плавнее могут быть фильмы, когда посмотрите «Хоббита» — это первый блокбастер, который идет со скоростью 48 кадров в секунду. Вы сразу заметите, насколько более «настоящими» и «живыми» стали персонажи фильма. Чтобы составить представление, посмотрите этот неофициальный трейлер фильма "Хоббит" со скоростью 48 кадров в секунду.
То, что cocos2d отображает в виде кадров в секунду, не является точным представлением переключения с 60 на 30, а затем на 20 и 15 кадров в секунду, а является средней частотой кадров в течение нескольких кадров. Поэтому, когда cocos2d печатает «45 кадров в секунду», это означает, что половину времени игра отображала 30 кадров в секунду, а другую половину — 60 кадров в секунду за последние пару кадров.
person
LearnCocos2D
schedule
12.12.2012