Большинство разработчиков игр должны были столкнуться с проблемой «низкой частоты кадров» хотя бы один раз при разработке игр. Но я, с другой стороны, делаю головоломку, похожую на судоку, где низкая частота кадров не является проблемой, поскольку в ней нет постоянно движущихся спрайтов / элементов, и на самом деле я планирую уменьшить частоту кадров, чтобы игра занимала меньше времени. Время процессора и, следовательно, снизить энергопотребление iDevices; все это просто вежливость к игрокам:)
Я уже знаю, что могу управлять частотой кадров в Cocos2d-iphone, изменив animationInterval:
[[CCDirector sharedDirector] setAnimationInterval:1.0/60];
Но у меня проблемы со стратегией, когда снижать частоту кадров, а когда возвращаться к нормальной частоте кадров (60 Гц). На данный момент мне удалось определить только стратегию для сенсорного события, а именно:
Начните с более низкой частоты кадров. На ccTouchBegan вернитесь к нормальной частоте кадров. На ccTouchEnded переключитесь на более низкую частоту кадров. Убедитесь, что мультитач обрабатывается соответствующим образом.
У меня осталось еще два условия:
Обработка CCActions на CCNodes: до тех пор, пока некоторые CCNodes имеют выполняемые действия, возвращайтесь к нормальной частоте кадров.
Система частиц: пока существуют системы частиц, испускающие частицы, возвращайтесь к нормальной частоте кадров.
По сути, мне нужно уметь обнаруживать, есть ли какие-либо действия, которые все еще выполняются на каких-либо спрайтах / слоях / сцене, даже если некоторые системы частиц все еще излучают частицы. Я предпочитаю, чтобы проверка отдельных объектов не выполнялась, и я предпочел бы просто [SomeClass isActionRunning]
. Я полагаю, что я мог бы сделать это, проверив список «запланированных» объектов, но я не уверен, как. Буду признателен, если бы вы также предложили некоторые другие условия, когда мне нужно вернуться к нормальной частоте кадров.