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:
y la puerta se abrió:
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?
Respuestas:
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.
fuente
Crea tres sprites ...
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.
fuente
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.
fuente
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 .
fuente