Почему один SpriteBatch.Draw вызывает снижение частоты кадров на 23 кадра в секунду? - PullRequest
1 голос
/ 24 ноября 2011

У меня серьезная проблема с производительностью игры, которую я разрабатываю для Windows Phone 7 в C # XNA 4.0 .

Происходит много кода, например столкновения, ввод, анимация, физика и т. Д.
Частота кадров была установлена ​​на 60fps , но работает только на 32fps .
Я пробовал много вещей, таких как отключение, например, обнаружение столкновений, но ничего помог получить более высокую частоту кадров.

Теперь случайно обнаружил, когда отключил отрисовку фона , который является просто стандартным изображением размером 480x800 (То же, что и Разрешение Windows Phone) и использует метод по умолчанию «spriteBatch.Draw (Textures.background, Vector2.Zero, Color.White)», частота кадров которого изменяется от 32 до 55 кадров в секунду . Я также попытался изменить текстуру на белую, но это тоже не помогло, и я также попытался переместить рисунок фона в другое место в коде, но ничего не изменилось.

Я попытался создать новый проект и просто нарисовал фон, но тогда частота кадров была бы равна 60 кадров в секунду, как и должно быть.

У меня только один SpriteBatch.Begin () и SpriteBatch. End (), где все необходимые спрайты нарисованы внутри.

В игру загружено 256 Texture2D, и все они загружаются в начале игры.
Игра - это боковой скроллер, поэтому фон должен постоянно перемещаться влево, но даже если я просто установлю его на Vector2.Zero, он все равно испортит fps на -20fps.

Надеюсь, у кого-нибудь есть решение это, или, по крайней мере, представление о том, почему это происходит.

1 Ответ

3 голосов
/ 24 ноября 2011

Если у вас есть 256 отдельных Texture2D, используемых в одном вызове SpriteBatch Begiin / End, неудивительно, что производительность не является оптимальной, если вы не упорядочиваете спрайты по текстуре, что, скорее всего, не для платформера. Все эти переключения текстур в одном пакете приведут к снижению частоты кадров - вполне вероятно, что фоновое изображение - всего лишь соломинка, которая ломает верблюдов для вашей конкретной игровой настройки.

Вы пытались объединить эти 256 отдельных изображений в меньшее количество Texture2D (т. Е. Используя таблицы спрайтов или атлас текстур)? Вот старая ссылка о том, как правильная сортировка спрайтов может повлиять на производительность

...