Для 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 неэффективны? Насколько неэффективен стиль?

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

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

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

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