[CCDirector sharedDirector].secondsPerFrame връща стойност нула

Търся начин да извлека FPS скорост и намерих свойство secondsPerFrame в 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 реда код за добавяне. Попитах този проблем другаде и проблемът е, че secondsPerFrame не се изчислява в CalculateMPF, освен ако ShowStats Label не е активиран... - person carljalal; 11.03.2014
comment
Можете да опитате да копирате кода, който изчислява spf в персонализиран клас. Ако си спомням правилно, това са само няколко реда код, съхраняващи последното клеймо за време и сравняването му с най-новото, плюс може би #import за стандартните функции за време. - person LearnCocos2D; 11.03.2014