Производительность: Vector2 против х / у - PullRequest
2 голосов
/ 03 ноября 2011

У меня есть некоторое количество старых игровых кодов, которые я переношу в XNA.Все мои объекты используют x / y (float) по сравнению с Vector2 для описания различных позиций и т. Д.

Синтаксис и т. Д. Кроме того, есть ли хорошая основанная на производительности причина для преобразования моих старых единиц типа x / y вVector2, или я могу просто сделать прямой порт и не беспокоиться об этом?

Ответы [ 3 ]

5 голосов
/ 03 ноября 2011

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

С точки зрения производительности, это будет очень мало, учитывая, что почти любая игра будет делать намного больше. Если что-то 2 с плавающей запятой может быть быстрее, так как доступ к переменной может быть быстрее, чем доступ к полю структуры (хотя, как сказал Мерлин, вероятно, все равно в конечном итоге будет).

2 голосов
/ 04 ноября 2011

Использование Vector2 медленнее двумя важными способами:

Создание одного может привести к вызову конструктора (хотя в некоторых типичных случаях он будет оптимизирован). Это дополнительный вызов метода. (Обратите внимание, что он не выделяет память.)

Вызов методов - и включает такие операторы, как + и * - включает вызов метода, который занимает время. Выполнение математических операций непосредственно на float с (и это включает , работающее непосредственно на X и Y членах Vector2 - то есть, встраивание операторов), не включает метод звоните и, следовательно, быстрее.

Чтобы поставить на него фактическое число - вставка простых операторов (+ и *) на Vector3 дает улучшение скорости на 380% (источник: " Понимание производительности XNA Framework " от Shawn Hargreaves).

Однако гораздо удобнее использовать векторные классы как есть. Так что , если вы не оптимизируете сложный математический код , такой как система частиц или физический движок, не беспокойтесь об этом!

(Также обратите внимание, что операторы на векторных типах, включая вызовы методов, уже безумно быстрые! Делать уже быстрые вещи быстрее не так полезно, как делать медленные быстрее! Как правило, улучшения производительности persue.)

0 голосов
/ 03 ноября 2011

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

В любое время, когда вам нужен ответ, основанный на производительности, вы должны заставить его работать. Так что я бы сделал порт, который поощряет ремонтопригодность, что IMO означает преобразование в Vector2. Затем, в ходе профилирования системы, вы устраните любые возникающие узкие места в производительности, включая использование поплавков против Vector2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...