2D карта сверху вниз: нормализация или нет?

11

Я абсолютный новичок в игровом программировании. Если этот вопрос будет сформулирован плохо, знайте, что это была не неряшливость с моей стороны, а отсутствие опыта игрового программирования.

Игра, которую я планирую написать, будет использовать 2D-карту сверху вниз как «мир». Мир может быть больше, чем окно (окно может увеличиваться или уменьшаться), и транспортные средства могут быть расположены в любой точке мира (= это не мозаичная карта, пространство "непрерывное").

Для пояснения на примере: если мир представляет собой местность 1000x1000 метров, транспортное средство может находиться в точке (327.31, 720.4) метра.

У меня вопрос: какой самый удобный способ представить мир внутренне? Я мог бы подумать об этих возможностях:

  • ничего не делать и использовать счетчики, как если бы я работал с физическим объектом,
  • нормализовать до пикселей, определяющих размер мира как число пикселей для представления 1000 метров при максимальном увеличении,
  • нормализовать до 1, определяя слово как квадрат размером 1

... но я уверен, что могут быть и другие / некоторые из них не имеют смысла. Просто, будучи моей первой игрой, у меня нет четких представлений о предстоящих проблемах, и я хотел бы получить некоторые рекомендации относительно разумного и правильного первоначального выбора.

Спасибо за ваше время.

макинтош
источник
У меня была эта проблема. Я не буду публиковать в качестве ответа - там уже есть отличные вещи. Но если вы работаете в какой-то произвольной единице, вы можете поддерживать любое разрешение, просто настраивая одно значение. Это также намного легче иметь дело с точки зрения игрового процесса. Наконец, с большими числами, такими как измерения пикселей, физические симы могут взорваться.
Коммунистическая утка

Ответы:

10

Я согласен с использованием реального значения (метры, футы и т. Д.) В качестве основы для расстояния. Проблема с вашими двумя другими предложениями заключается в том, что они оба являются переменными. Работа с мировым размером 1приведет к тому, что вся ваша арифметика будет с плавающей точкой между -1 и 1, что может привести к большему количеству ошибок с плавающей точкой. Кроме того, если вы когда-нибудь решите создавать изменяемые размеры мира («Большие» миры для более длинных игр и т. Д.), Вы столкнетесь с множеством проблем в своем коде. Аналогично, если вы используете пиксели, даже при максимальном / минимальном уровне масштабирования, вы столкнетесь с путаницей, а также с проблемами, если решите увеличить или уменьшить уровни масштабирования.

dlras2
источник
Этот ответ отлично (+1). Мне особенно нравится, как вы объяснили потенциальные проблемы с использованием «1» для размера мира.
Рэндольф Ричардсон,
Если вы делаете какой - либо физического моделирования, даже если полностью выдуманные, используя с фиксированной запятой чисел будет в конечном итоге вызывает недопустимые результаты. Все , что вам нужно сделать , это модель один автомобиль движется с единичной скоростью по диагонали , и вы увидите , у вас нет никакой возможности должным образом представлять свою позицию.
EDA-QA Mort-ор-у
3
Договорились RE: с использованием счетчиков. Это также поможет вам мысленно визуализировать и понимать вещи. «Это транспортное средство находится в 5 метров в длину», или «Эти два объекта находятся в 500 метрах друг от друга» и не должны делать психическому математику все время , чтобы получить чувство для того, что вы делаете.
Тим Холт
-1 что утверждение о том, что целочисленная арифметика быстрее, чем с плавающей запятой, в общем-то неверно, на самом деле они намного быстрее на большинстве современных платформ
Maik Semder
2
Использование значений с фиксированной точкой для абсолютных позиций может быть хорошей идеей. Это приводит к постоянной точности и одинаковой физике во всем мире.
CodesInChaos
7

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

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

кувырок
источник
5

Нормализация до «1» на самом деле не подходит (что если у вас есть мир не квадратный или несколько миров с разным размером ...).

Использование пикселей, как ... не путайте геймплея и графики мероприятий !! Не закрывайте себя, чтобы вы не могли изменить графику, не меняя код.

Таким образом, метры (футы или любые другие измерения, которые вам нравятся больше всего) - это путь. Вы будете чувствовать себя намного лучше, если будете кодировать свою ракетную установку, чтобы двигаться со скоростью 50 км / ч, чем 0,00076 единиц в секунду ...

Valmond
источник