Что вызывает потерю частоты кадров? - PullRequest
2 голосов
/ 21 июня 2009

Я пишу игру с cocos2d, и я заметил, что частота кадров падает по ходу игры. Я проверил на утечки, но все выглядит хорошо, поэтому я не знаю, что делать дальше. Извините, если это действительно простой вопрос, но какие факторы вызывают потерю частоты кадров?

Проблема, кажется, усугубляется, когда я очищаю спрайты от слоя. Иногда частота кадров возвращается к 60, но иногда она падает до 30 или ниже и никогда не восстанавливается. Через несколько минут анимация заметно замедляется, и игра в значительной степени останавливается. Я не уверен, относится ли это к cocos2d или является общей проблемой в разработке игр, но это делает игру непригодной для игры :(

Ответы [ 4 ]

3 голосов
/ 21 июня 2009

Как вы тестируете утечки памяти? Я не думаю, что вы должны исключать это как причину, пока вы не будете абсолютно уверены, потому что это звучит как классическое «поведение утечки памяти».

Также убедитесь, что у вас нет чего-то вроде журнала или чего-то в памяти, которое постоянно увеличивается и увеличивается с каждым кадром (я так говорю, потому что это случилось со мной в прошлом).

Также убедитесь, что вы не загружаете новые объекты и / или спрайты в процессе игры. Попробуйте сохранить все ваши загрузочные вызовы в сегменте инициализации вашей логики.

1 голос
/ 02 июля 2009

Используете ли вы предварительно загруженные текстуры? Если вы не должны Загрузка одной и той же текстуры снова и снова идет медленно и является утечкой.

Кроме того, вы выпускаете текстуры, с которыми вы закончили? Несмотря на то, что спрайт исчез, текстура все еще там.

1 голос
/ 21 июня 2009

Ваша частота кадров упадет, если вы добавите больше спрайтов, очевидно, потому что он должен обрабатывать больше.

Теперь я ничего не знаю о cocos2d, но когда вы «очищаете спрайты от слоя», это звучит так, как будто это просто скрывает их от просмотра, в дополнение к сохранению того факта, что они теперь скрыты.

Может быть, попытаться использовать меньше спрайтов?

0 голосов
/ 21 декабря 2013

Недавно у меня возникла проблема с Flash, связанная с постепенным замедлением растеризации графики, поэтому, возможно, здесь может происходить нечто подобное. Замедление обычно происходит, когда системе приходится выполнять слишком много работы. Утечки памяти очевидны, потому что перераспределение и фрагментация памяти никогда не хороши, но учтите это:

Я обнаружил, что забыл назвать «очистить» объект Graphics, поэтому каждый раз, когда я перерисовывал границу спрайта, он рисовал еще один скругленный прямоугольник, а команды рисования накапливались. После нескольких дюжин взаимодействий он рисовал этот заполненный, закругленный прямоугольник в сто раз над собой. Шейдеры, код и т. Д. Занимали менее 1% времени рендеринга, но чрезмерная растеризация убивала мою частоту кадров.

Поэтому я бы предложил проверить такие вещи, как создание объектов, забыть очистить объекты, методы рисования и т. Д. Убедитесь, что система не выполняет ненужную работу или накапливает ненужные операции, а не только объекты памяти.

...