[CCDirector sharedDirector].secondsPerFrame возвращает нулевое значение.

Я ищу способ получить скорость FPS, и я нашел свойство secondPerFrame в CCDirector, однако каждый CCLog говорит, что [CCDirector sharedDirector].secondsPerFrame равно «0,000000».

Если бы я мог настроить код для немедленной адаптации к падению частоты кадров, игра практически никогда не работала бы со скоростью ниже 60 кадров в секунду, что было бы потрясающе.


person carljalal    schedule 10.03.2014    source источник


Ответы (1)


Если бы я мог настроить код для немедленной адаптации к падению частоты кадров, игра практически никогда не работала бы со скоростью ниже 60 кадров в секунду, что было бы потрясающе.

Если бы это было возможно, мы бы нашли это стандартной функцией в движках рендеринга. Увы, это не так.

Обнаружение пропущенного кадра подразумевает, что кадр уже должен был быть пропущен. Накладные расходы на переключение путей кода, особенно обратно на версию с «высокой детализацией», также часто слишком высоки.

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

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

Часто лучше ограничить игру 30 кадрами в секунду, если вы не можете поддерживать 60 кадров в секунду все время, и спроектировать ее на стабильные 30 кадров в секунду, а не на колебания от 40 до 60 кадров в секунду.

В любом случае, если вы зарегистрируете secondsPerFrame и получите 0,0000, возможно, вы зарегистрировались, используя неправильный спецификатор формата. Попробуй это:

NSLog(@"spf: %f", [CCDirector sharedDirector].secondsPerFrame);

Имейте в виду, что это значение может быть средним по нескольким кадрам и может не обновляться в выпусках. Проверьте код на наличие #if/#ifdef.

person LearnCocos2D    schedule 10.03.2014
comment
Спасибо. Я знаю, что вы имеете в виду, но я думаю, что в этом конкретном случае пользователь этого не заметит, потому что я удаляю трудноразличимые частицы, и для добавления в основном требуется всего 5-10 строк кода. Я задавал эту проблему в другом месте, и проблема в том, что секунды на кадр не рассчитываются в calculateMPF, если не включена метка ShowStats... - person carljalal; 11.03.2014
comment
Вы можете попробовать воспроизвести код, вычисляющий spf, в пользовательском классе. Если я правильно помню, это всего лишь несколько строк кода, сохраняющих последнюю метку времени и сравнивающих ее с самой последней, плюс, возможно, #import для стандартных функций времени. - person LearnCocos2D; 11.03.2014