лучшие практики cocos2d, многопоточность и планировщик - PullRequest
0 голосов
/ 04 июня 2011

Ну, пример кода для этого невелик. Я пишу игровой цикл и сталкиваюсь с загадкой. Сначала я попытался создать расписание для цикла, так как это было указано в рекомендациях, как это должно быть сделано. Моя частота кадров составляет 60 кадров в секунду, и цикл также работал с интервалом в 60 кадров в секунду. Я быстро заметил, однако, что интервал времени немного больше, чем предложение, и фактическая скорость обновления функции очень неустойчива, в диапазоне от 15 до 65 кадров в секунду. Это приводило к скачкам в обновлении объектов, даже когда расстояние их обновления регулировалось как функция времени. Как только обновление упало ниже 20 кадров в секунду, оно стало очень очевидным, когда оно обновилось, и стало довольно уродливо.

Затем я попытался создать свой собственный поток, чтобы более точно регулировать частоту обновления. С помощью этого метода я смог почти точно регулировать скорость обновления. При этом все движения и анимации были плавными. Проблема этого метода в том, что cocos2d явно не поддерживает многопоточность, так как я периодически вижу разрыв экрана. Кроме того, если моя частота обновления не точно соответствует моей норме, я вижу скачки. Я полагаю, что это происходит из-за запуска метода draw в середине цикла обновления, что является общей проблемой многопоточности.

Два способа, которые я могу придумать для решения этой проблемы, - найти какой-то способ, чтобы точно регулировать частоту срабатывания планировщика, или найти способ заблокировать код чертежа, пока я не закончу свое обновление. Я довольно долго искал примеры того, как это сделать, и безуспешно. Если у кого-то есть более четкое представление о том, как справиться с такой ситуацией, я был бы очень признателен за некоторые советы. Я слишком привык к C ++, и все происходит со скоростью, с которой я им говорю. Если вам нужно, чтобы я опубликовал дополнительную информацию, просто спросите! Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 04 июня 2011

Ваша проблема в вашей запланированной функции. Он просто не может бежать так быстро, как вы хотите. Попробуйте запустить сцену helloWorld из cocos2d, и вы заметите, что fps стабильны около 60 (59,8 - 60,2)

...