Barco que pasa por debajo de un puente en un RTS basado en mosaico 2D

10

Estoy escribiendo un mosaico 2D basado en RTS. Y quiero agregarle una función 'pseudo 3D': puentes sobre los ríos.

Todavía no he comenzado a codificar, solo trato de pensar cómo encaja en el modelo de detección de colisión. Un bote que pase por debajo del puente y una unidad que se mueva sobre el puente eventualmente ocupará la misma celda en el mapa. ¿Cómo evitar que choquen?

¿Existe un enfoque común para resolver tal problema? ¿O necesito implementar un mundo 3D para hacer esto?

aleguna
fuente
bueno, si está haciendo un sistema basado en mosaicos, puede agregar algo como un método "está ocupado" para cada vez. Solo haga que el puente verifique debajo de sí mismo y arriba.
Benjamin Danger Johnson
2
Si las unidades terrestres no interactúan con las unidades de agua, puede manejar colisiones por separado para ambos conjuntos de unidades. Y tal vez considere que un bote en el puerto es una unidad terrestre para permitir interacciones como el jugador / npc que ingresa al bote.
GameAlchemist

Respuestas:

7

Básicamente, tendrá que crear una tercera dimensión, aunque en el caso más simple puede consistir en solo dos valores: "en tierra / en puente" y "en agua / debajo del puente".

Se puede encontrar una inspiración en la forma en que lo hace el Comando Estratégico Avanzado : las unidades ocupan un nivel de altura específico, solo pueden moverse en niveles de altura que se ajusten a su tipo a menos que haya características específicas que les permitan hacer lo contrario (por ejemplo, pistas de aterrizaje para aviones) y cambiarlos generalmente cuesta puntos de movimiento, con penalizaciones en algunos niveles de altura u otros. Una ficha puede estar ocupada por cualquier número de unidades siempre que cada una tenga un nivel de altura diferente.

En el caso de ASC, los niveles son:

  • espacio
  • gran altitud (bombardeo)
  • altitud media (interceptores)
  • altitud de ataque al suelo
  • tierra (la mayoría de las unidades terrestres y aerodeslizadores, incluso sobre el agua)
  • agua
  • parcialmente sumergido (submarinos)
  • sumergido (submarinos "ocultos")
Martin Sojka
fuente
9

Puede agregar un atributo simple a cada mosaico que especifique su nivel.

Así por ejemplo:

tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it. 

// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);

// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
    foreach( var listOfTiles in tiles ) {
        foreach( var tile in listOfTiles ) {
            tile.draw();
        }
}

Ahora puede ordenar sus mosaicos en función de sus valores de capa y dibujarlos de abajo a arriba. Esto hará que parezca que tienes una cierta profundidad en tu juego. La mayoría de los motores de mosaico admiten esto. Otra cosa genial que puedes agregar es la transparencia a tus texturas para que puedas ver hasta la capa inferior.

Esto se puede hacer con agua, por ejemplo: imagine el agua en lvl 1 y luego el fondo del océano en lvl 0. Si la textura del agua es algo transparente, podrá ver el fondo del océano desde arriba.

Zolomon
fuente
@aleguna ¡No te preocupes! Es divertido ayudar. :)
Zolomon