Что является более экономичным способом укладки текстуры? - PullRequest
0 голосов
/ 26 сентября 2011

Я занимаюсь разработкой 2D-игры на основе плитки.Я разбил вещи на такие компоненты, как skybackground, landbackground, town, UI и т. Д., Причем каждый компонент обрабатывал свой чертеж.перед вызовом любого из вызовов отрисовки, я spritebatch.Begin() со значениями по умолчанию, так что я рисую все в 1 пакет.

Для рисования массы земли я неоднократно рисую квадратную текстуру земли по всей области, пока не заполню ее.Однако есть режим spriteBatch, называемый linear wrap, который делает именно это.недостатком было бы то, что мне придется изменить свой дизайн, разделив один глобальный spritebatch.begin() много раз на каждый компонент.

Таким образом, мой вопрос в том, что лучше / экономичнее: выложить текстуру вручную или разделить begin() и end() среди подкомпонентов?

Существуют также другие проблемы, которые могут потребовать от меня разделения одного spriteBatch.Begin(), поэтому насколько важен 1 дополнительный spriteBatch.Begin()?или еще 10?или еще 100?Я хотел бы знать, в каком масштабе я должен начать беспокоиться о добавлении begins().

1 Ответ

1 голос
/ 26 сентября 2011

Лучшее решение состоит в том, чтобы как можно больше работы происходило на GPU, а не на CPU (например, используя преимущества листов и т. П.) И как можно меньше вызовов SpriteBatch.Begin (), таким образом ...

Похоже, что оптимальным решением здесь не является использование экстремальных решений.

Почему бы просто не иметь две SpriteBatches и использовать их для вашей земли, а другую для всего остального?

Например, перепроектируйте свое решение так, чтобы:

  • обе SpriteBatches были переданы в каждый компонент и позволить компоненту решить, какой из них использовать?... или ...

  • у каждого компонента есть свойство, которое указывает, какой SpriteBatch ему требуется, и передает соответствующий при рисовании?

Что касается влияния каждого SpriteBatch.Begin (), то оно действительно зависит от вашей конкретной игры (и объема работы, которая должна произойти для завершения предыдущего spriteBatch и начала следующей), поэтому я бы предложил постоянно тестировать и отслеживать производительностьваш лучший способ определить, когда вам следует позаботиться.

...