¿Cómo manejo los objetos del juego con dos profundidades?


8

parte inferior del objeto debajo del jugador, su parte superior sobre el jugador

Quiero poder hacer lo que ves en la imagen, pero con una sola pared. El jugador debe poder caminar a ambos lados del mismo objeto . Es decir, el mismo muro está debajo del héroe cuando bajo de él, y está arriba del héroe si vengo de encima.

Es como dos profundidades en la misma pared, por lo que no se trata solo de dibujarlo antes o después. Podría cortar el objeto en dos, pero esa sería la solución fácil (y tal vez computacionalmente costosa). ¿Cómo debería hacer esto?


3
Dividir el objeto en dos parece la forma más natural de hacerlo. La parte superior está detrás del personaje, y la parte inferior está entre el jugador y el personaje. Todavía no es computacionalmente costoso, solo debe asegurarse de que ambas partes no se alejen entre sí.
Fabinout

Lo más probable es que tenga que hacerlo, pero ¿alguna otra idea?
Xkynar

Respuestas:


8

Aquí hay tres formas de hacerlo. Cuál será el adecuado depende del tipo (gráfico) de juego que estés haciendo.

  1. Como el usuario Fabinout ya comentó: "Dividiendo el objeto en dos ... La parte superior está detrás del personaje, y la parte inferior está entre el jugador y el personaje". Si está haciendo un juego rígidamente basado en fichas (los caminos mostrados son los únicos dos posibles caminos cerca de la pared), esta es probablemente una buena manera de hacerlo. Tenga en cuenta que para que esto funcione, la distancia entre las rutas superior e inferior debe ser al menos tanto como la altura del personaje.

    Una desventaja de este método es que solo ayuda con casos como este en particular; No es una estrategia general para apilar sprites.

  2. Dibuja todos los sprites, tanto el jugador como el escenario, de arriba a abajo en el orden de sus posiciones de "nivel del suelo" (base de la pared, pies del jugador). Esto hará que la pared se muestre automáticamente en el lado correcto, y es una estrategia común para los juegos con estilo "isométrico" y "RPG 2D".

    Otra ventaja de esto es que generalmente se ve bien incluso si los objetos se cruzan entre sí, por ejemplo, personajes que no bloquean el movimiento de los demás; caminando por un campo de hierba alta. Las desventajas son que necesita determinar de manera eficiente el orden de dibujo (por ejemplo, ordenar los sprites o tener una matriz 2D de mosaicos que sepan qué sprites hay en ellos) y que se complica cuando tiene objetos que no están todos enraizados visualmente en el mismo nivel del suelo.

  3. Tenga una "capa frontal" y una "capa posterior" donde su personaje ocupe una u otra (y el muro se dibuja después de atrás pero antes del frente). Dependiendo de cómo te acerques a la pared, el personaje se cambia a la capa frontal o posterior por zonas de disparo. Así es como los juegos de Sonic the Hedgehog manejan cosas como loop-the-loops.

    La ventaja es que puede tener esencialmente dos planos 2D independientes para construir sus elementos de nivel. Sin embargo, esto es más apropiado para un juego donde el movimiento vertical está saltando, mientras que, por la forma de sus gráficos, su juego parece ser uno donde el movimiento vertical en pantalla se mueve hacia adelante / atrás en el suelo, y hay mucho más que dos posiciones diferentes en esa dimensión.


El uso de capas como la n. ° 3 es la cantidad de trucos de desplazamiento lateral de la mayoría de las consolas antiguas.
Patrick Hughes

1

Dibuje objetos en orden de Yvalor, de modo que los objetos "más alejados" (más arriba en la pantalla) se dibujan antes / debajo de los objetos "más cercanos". Así de simple

En términos más generales, solo dé a los objetos un valor de profundidad (que podría basarse implícitamente Yo establecerse explícitamente, según el juego y las necesidades) y renderizar en ese orden.

Este es el "algoritmo del pintor" en el trabajo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.