Mapa 2D de arriba hacia abajo: ¿normalización o no?

11

Soy un principiante absoluto con la programación de juegos, si esta pregunta está mal formulada, tenga en cuenta que no fue un descuido a mi lado, sino la falta de experiencia en programación de juegos.

El juego que planeo codificar usará un mapa 2D de arriba hacia abajo como "mundo". El mundo puede ser más grande que la ventana (la ventana puede acercarse o alejarse) y los vehículos pueden ubicarse en cualquier punto del mundo (= no es un mapa en mosaico, el espacio es "continuo").

Para aclarar con un ejemplo: si el mundo es un terreno de 1000x1000 metros, un vehículo podría estar en la ubicación (327.31, 720.4) metros.

Mi pregunta es: ¿cuál es la forma más conveniente de representar al mundo internamente? Podría pensar en estas posibilidades:

  • no haga nada y use medidores como si estuviera trabajando con el objeto físico,
  • normalizar a píxeles que definen el tamaño mundial como el número de píxeles para representar 1000 metros con el zoom máximo,
  • normalizar a 1 definiendo la palabra como un cuadrado de tamaño 1

... pero estoy seguro de que podría haber otros / algunos de los míos podrían no tener sentido. Es solo que, siendo mi primer juego, no tengo una idea clara de los problemas que tengo por delante, y me gustaría obtener alguna orientación para tomar una decisión inicial razonablemente correcta.

Gracias por tu tiempo.

Mac
fuente
Tuve este problema No publicaré como respuesta, ya hay cosas geniales allí. Pero si trabaja en una unidad arbitraria, puede admitir cualquier resolución simplemente ajustando un único valor. También es mucho más fácil tratarlo en términos de jugabilidad. Finalmente, con grandes números como las mediciones de píxeles, los simuladores de física pueden explotar.
El pato comunista

Respuestas:

10

Estoy de acuerdo con usar un valor del mundo real (metros, pies, etc.) como base para la distancia. El problema con sus otras dos sugerencias es que ambas son variables. Trabajar con un tamaño mundial de 1hará que toda su aritmética sea de punto flotante entre -1 y 1, lo que puede conducir a más errores de punto flotante. Además, si alguna vez decide hacer tamaños de mundo variables (mundos "grandes" para juegos más largos, etc.), introducirá muchos problemas en su código. Del mismo modo, si utiliza píxeles, incluso a un nivel de zoom máximo / mínimo, se encontrará con problemas y confusión si decide aumentar o disminuir los niveles de zoom.

dlras2
fuente
Esta respuesta es excelente (+1). Me gusta especialmente cómo explicaste los posibles problemas con el uso de "1" para el tamaño del mundo.
Randolf Richardson
Si está haciendo algún tipo de simulación física, incluso si está totalmente inventado, el uso de enteros de punto fijo terminará causando resultados no válidos. Todo lo que tiene que hacer es modelar un solo vehículo que se mueva a la velocidad de la unidad en diagonal y encontrará que no tiene forma de representar adecuadamente su posición.
edA-qa mort-ora-y
3
RE acordado: uso de medidores. También te ayudará a visualizar y comprender mentalmente las cosas. "Ese vehículo tiene 5 metros de largo" o "Estos dos objetos están separados por 500 metros" y no tienen que hacer cálculos mentales todo el tiempo para tener una idea de lo que estás haciendo.
Tim Holt
-1 esa afirmación sobre que la aritmética de enteros es más rápida que el punto flotante no es cierta en general, de hecho, son mucho más rápidos en la mayoría de las plataformas modernas
Maik Semder
2
Aún usar valores de punto fijo para posiciones absolutas puede ser una buena idea. Esto conduce a una precisión constante y física idéntica en todo el mundo.
CodesInChaos
7

De las tres opciones que sugirió, probablemente sea mejor usar medidores. A medida que crea otros datos, lidiar con la longitud en metros le hará la vida mucho más fácil. Entre otras razones, puede decidir cambiar el tamaño de su mundo, o diferentes niveles pueden necesitar mapas de diferentes tamaños.

También puede decidir usar pies (o posiblemente pulgadas). Parte de esta decisión puede depender de los paquetes de middleware que utilice: algunos motores de física prefieren un tipo de unidad u otro (aunque casi siempre es configurable). En su mayor parte, puede elegir una unidad e ir con ella.

Dar la vuelta
fuente
5

Normalizar a '1' realmente no es el camino a seguir (¿qué pasa si tienes un mundo no cuadrado? O varios mundos con diferentes tamaños ...).

Usando píxeles como ... ¡NUNCA mezcle el juego y las medidas gráficas! No te encierres para que no puedas cambiar los gráficos sin tener que cambiar el código.

Entonces, metros (pies o cualquier medida que más le guste) es el camino a seguir. Se sentirá mucho mejor codificar su lanzador de misiles para moverse a 50 km / h que 0.00076 unidades / segundo ...

Valmond
fuente