Cómo lidiar con puertas animadas en mosaicos isométricos

10

Tengo un problema complicado que no estoy seguro de cómo abordar mejor: tengo un mosaico animado de una puerta. Cuando está cerrado, debe clasificarse de una manera, pero cuando está abierto, tendrá que clasificarse de una manera diferente, ya que pertenece a un mosaico vecino diferente.

Aquí está la puerta cerrada:

puerta cerrada

y la puerta se abrió:

puerta abierta

Me imagino que sería posible anular el sistema de clasificación para dichos mosaicos y ajustar la clasificación según el marco, pero se siente un poco extraño.

¿Alguien ha encontrado un escenario similar? ¿Alguna solución elegante?

George Profenza
fuente
2
¿Cómo detecta actualmente su sistema de clasificación el orden de dibujo de los mosaicos?
Roy T.

Respuestas:

4

Tal vez podría hacer una puerta con dos objetos, en diferentes mosaicos, y solo mostrar uno de ellos a la vez. De esta manera, la puerta abierta también podría bloquear el movimiento, lo que parece un poco realista.

No importa
fuente
4

Crea tres sprites ...

  1. Puerta cerrada (como su primer sprite): bloquea el movimiento
  2. Solo el marco (poste en su caso) de la puerta, pero sin puerta, no bloquea el movimiento
  3. Solo la puerta en posición abierta: bloquea el movimiento

Cuando la puerta está cerrada, dibuja el sprite 1 y trátalo como un "bloqueador" para que los jugadores no puedan atravesarlo.

Cuando se abre la puerta, reemplace ese sprite con # 2 (solo el poste de la puerta). Luego coloque el sprite # 3 (solo la puerta) en la celda adyacente en la que estaría la puerta.

Cerrar es simplemente quitar la puerta y reemplazar el poste con poste + puerta en posición cerrada.

Con esta configuración, no tiene que preocuparse por mostrar la puerta abierta en ningún orden especial. Simplemente renderícelo en el orden como cualquier otro objeto en el cuadrado en el que se encuentra.

La desventaja es que no puedes tener el jugador ni ningún otro objeto en el cuadrado donde irá la puerta abierta.

Tim Holt
fuente
3

Hay 2 trucos que uso para ordenar en 2D:

  • Agregue la posición del suelo a los sprites, este es un punto donde el sprite toca el suelo (pies femeninos, tronco de árboles, marco de las puertas) y clasifique por él en lugar de píxeles de sprites. De esta forma, el sprite no se verá afectado por la animación.

  • Agregue niños no ordenables a los objetos (los hombres pueden tener varios niños que no afectan la clasificación: capa, arco, espada, etc., el marco de la puerta tiene puerta infantil). De esta forma, la animación de los sprites secundarios tampoco afecta la ordenación.

Kromster
fuente
1

La mejor manera de resolver la clasificación de los objetos es no ordenarlos en absoluto. Si usa un búfer de profundidad, puede renderizar todo en una pasada. Los objetos que tienen un valor z más alto estarán más lejos que los objetos con un valor z más bajo.

Incluso si tu juego es 2D, deberías considerar el uso de coordenadas 3D con un búfer de profundidad, de lo contrario siempre bailarás con el algoritmo del pintor .

caballero666
fuente
Es cierto, pero ¿cómo determinar la posición Z? Solo por clasificación
Kromster
Sí, pero esa clasificación ahora ocurre sin conexión, en lugar de durante el renderizado. Ahora el diseñador de niveles puede construir el nivel con los valores Z en mente, sin tener que preocuparse por recortar objetos.
knight666