Подтвердить что ты не робот

Для Android, следует ли использовать тип данных float чаще для моей игры или просто бросать плавать при рисовании?

Android использует структуру RectF для рисования растровых изображений. Я работаю над своей игровой структурой, поэтому, например, у Sprite будет и координата x/y, ширина, высота, скорость и т.д. Это означает, что каждый раз в моем цикле рендеринга я должен отбрасывать эти целые числа при плавании, когда вычисляет исходный/целевой RectF для использования... в качестве альтернативы я могу быть гораздо более универсальным и использовать поплавки везде, чтобы когда пришло время имитировать физика и рендеринг, все типы уже одного типа... даже если это не нужно для того, что свойство (мне не нужен float для "x position", но вам придется отбрасывать его при рендеринге if нет).

если поплавки обычно на 2-10x больше неэффективны (за http://developer.android.com/guide/practices/performance.html), каков правильный курс?

TLDL: Должен ли я бросать int для float на рендеринге или просто использовать все переносимые переменные, даже если float неэффективны? Насколько неэффективен тип?

4b9b3361

Ответ 1

Лучший способ сделать это - сделать ваши расчеты с максимальной степенью точности, необходимой для получения ожидаемых результатов в пределах указанного допуска. Это означает, что если вам нужно использовать двойники для выполнения вычислений и получения ожидаемых результатов с согласованностью, используйте их. Выясните, где меньше точности, и выполняйте только операции, требующие ее с поплавками. Помните, что вашему миру не нужно приближаться к гравитации земли для падающих предметов, вы можете упростить вещи и сделать гравитацию 10 вместо 9.81, сделать пиксели соответствующими четным единицам и т.д. Это также поможет, если вы определите свои константы в одинаковые единицы и избегать преобразования единиц измерения в математику (поскольку это приводит к дополнительным операциям), лучше добавить более конечные константы, которые имеют что-то вроде гравитации в см/с, м/с и км/ч, чем для того, чтобы иметь только один и перевести его тысячу раз. О, и стоимость литья int для плавания не очень высока, сравнивая умножение 2 поплавков, поэтому подумайте об этом.

Я также отмечу, что FPU становятся все более распространенными в современных телефонах Android, поэтому проблема использования математики с плавающей запятой становится немного менее важной (хотя и не полностью).

Другая вещь, которую я хочу отметить, - Double/Float/Integer vs. double/float/int. Первые требуют создания новых объектов для использования и не должны использоваться для математики (по возможности), тогда как последние являются примитивами и не приводят к созданию новых объектов, они менее дорогостоящие для создания.