Как я могу избежать частых int / float / double приведений при разработке приложения XNA? - PullRequest
5 голосов
/ 12 января 2012

Я делаю простую 2D-игру для Windows Phone 7 (Mango) с использованием XNA Framework.

Я сделал следующие наблюдения:

  • Большинство операций рисования принимают float s
  • SpriteBatch.Draw принимает Rectangle, который использует int s
  • Класс Math принимает double s в качестве параметров и также возвращает double s

Так что мой код заполнен типами между int с, float с и double с. Это чертовски много типов.

Можно ли как-нибудь избавиться от них или мне просто наплевать на это?

Кроме того, эти типы типов представляют собой ощутимую потерю производительности?

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Я тоже это заметил, но если вы не заметите какого-либо снижения скорости, это можно считать микрооптимизацией.Преобразование между float и int относительно дорого, тогда как преобразование между float и double дешево.Поэтому там, где вам не нужно выполнять преобразование float в int, вы можете избежать этого.Типовое приведение обычно дешевле, чем фактическое преобразование (например, с использованием Convert.ToInt32).Тем не менее, все это вряд ли будет узким местом, если вы не выполняете это много раз.Кроме того, из этого поста :

  • умножения с плавающей, двойной и int одинаковой производительностью ==> используйте правильный тип числа для вашего приложения, не беспокойтесь
  • телефон работает в 4–10 раз медленнее, чем ПК, который я использую для разработки своих приложений ==> тестировать на реальном телефоне, не доверяйте своему компьютеру математические операции
  • деление до 8xмедленнее, чем умножения!==> не используйте деления, например, попробуйте использовать 1 / a, затем умножьте

Неофициальные числа, но я думаю, что последний является вполне приемлемым методом.Кроме того, удваивается, как часто полагают, медленнее, чем числа с плавающей запятой, но это зависит от системы, на которой он работает.AFAIK, Windows Phone оптимизирован для использования doubles, что объясняет принятие классом Math.

В целом, я бы сказал, что довольно часто можно увидеть, что кастинг происходит довольно часто с платформой XNA.Конечно, этого следует избегать всякий раз, когда это возможно, но вряд ли он станет источником узких мест для игр, если вам не нужно часто его выполнять, и в этом случае другие области может быть легче оптимизировать (или может потребоваться перепроектирование структуры игры).).

0 голосов
/ 12 января 2012

Если вы беспокоитесь о преобразовании Rectangle, есть перегрузки, которые принимают Vector2 вместо, которые основаны на float:

http://msdn.microsoft.com/en-us/library/ff433988.aspx

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

...