Производительность игры XNA

Я пишу игру, используя C # 2010 и XNA 4.0. Я хочу, чтобы это была хорошая игра, а не какая-то «очередная ерунда», и поэтому одна из моих целей - хорошая частота кадров. В связи с этим я хотел бы попросить вас дать несколько советов, связанных с XNA или C # - что я могу сделать, чтобы ускорить мой код и, таким образом, улучшить FPS.

Вот кое-что, что я узнал:

  • (c # ) использование array insted of list <> значительно улучшит производительность, если вы хотите получить доступ к огромному количеству данных (или даже большому количеству: наличие массива из 20000 элементов дало почти 180 % FPS списка 20000.
  • (c #) использование для вместо foreach улучшит производительность. На тех же 20000 элементах разница примерно 5-10%.
  • ( xna и c #), вызывающие методы, требуют производительности, поэтому, когда я разбросал свой код по методам, которые вызывали другие методы и тому подобное, и все было настолько круто и объектно-ориентировано, что стоило 1-3 FPS на каждый вызов.
  • (xna) update vs. draw: не было никакой разницы в производительности, когда я поместил код в update () и draw (), поэтому, если вам все равно, вам не нужно добавлять методы в update () вместо того, чтобы хранить все вместе в draw () в надежде на лучший FPS.
  • (xna) не знаю, это я или просто 4.0, но когда вы загружаете .X с большим количеством текстур в нем и довольно сложные сетки, на их загрузку уходит МНОГО времени. Мне пришлось написать свой собственный загрузчик .X и средство визуализации сетки / модели только потому, что XNA начала загружать текстуру для каждого треугольника независимо от того, была ли у предыдущего такая же текстура. Даже написание моего собственного загрузчика контента, который кэширует текстуры для вас, не является решением, потому что он все еще используется много раз. Если вы делаете что-то красивое и пушистое, я предлагаю использовать класс drawuserprimitives , а не класс Model . (не знаю, только ли это 4.0, или у 3.1 тоже была такая проблема с производительностью)
  • (xna и c #) Старайтесь избегать использования слова «новый», когда речь идет о рисовании. Я видел в сети некоторый код, который был скопирован / вставлен вместе и имел «basicEffect = new BasicEffect (graphicsDevice);» и такое безобразие в draw (), и даже хуже: в итерациях внутри draw (). Это убьет производительность. Вместо этого создайте один такой класс в «игре» или в статическом классе. Это относится и к другим «временным объектам»: некрасиво, но я думаю, что лучше создать что-то глобальное и использовать его с вниманием, чем создавать красивый и пушистый код, который сделает нашу игру из-за сборщика мусора.

Хорошо, Короче говоря, напишите здесь несколько полезных советов, чтобы я / мы могли делать хорошие, быстрые и оптимизированные игры;)

Заранее спасибо: Зейкс

15
задан Zéiksz 27 August 2011 в 22:52
поделиться