Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Davirro en Junio 06, 2014, 09:22:34 PM

Título: Orden de dibujado en mapa isometrico
Publicado por: Davirro en Junio 06, 2014, 09:22:34 PM
Hola estoy haciendo pruebas con mapa isometrico , pero el orden de dibujado de los tiles hace que se vean superpuestos, soy muy novato y no encuentro el fallo.
No me refiero al "deph" ,sino que deberia dibujar de izquierda a derecha y de arriba hacia abajo.

¿alguna sugerencia? Gracias.

Título: Re:Orden de dibujado en mapa isometrico
Publicado por: penumbra en Junio 06, 2014, 10:15:58 PM
Por la imagen, a mi me parece que el orden de dibujo se hace al revés, de derecha a izquierda y de abajo hacia arriba. Sin ver el código no se puede saber qué produce la falla exactamente
Título: Re:Orden de dibujado en mapa isometrico
Publicado por: Davirro en Junio 06, 2014, 10:24:17 PM
Acabo de encontrar un post en este mismo foro   http://www.comunidadgm.org/preguntas-y-respuestas/problema-con-depth-isometrico%28solucionado%29/msg84933/#msg84933 y ya esta solucionado, es simplemente asignar  a "depth = -y-x" cuando se crea.
Gracias de todos modos.

P.D. Con respecto a la imagen no he sabido ponerla en el texto.


Título: Re:Orden de dibujado en mapa isometrico
Publicado por: Davirro en Junio 06, 2014, 11:53:31 PM
Pues no, no se ha arreglado del todo   :'( 
En algunos tiles se montan encimad otros , cambiando el depth ,solo he cambiado el lado del solapamiento.
En el tutorial pone esto "Cuando 2 ó más instancias poseen el mismo depth, se dibujan según el orden en el que fueron creadas" por eso en algunas se montan y en otras no ,dependiendo el orden que fueron creadas. Voy a ver si puedo manipular ese orden, ordenando el dibujado por preferencia de lugar y no por preferencia de creacion.
Título: Re:Orden de dibujado en mapa isometrico
Publicado por: eams1986 en Junio 07, 2014, 12:07:31 AM
Amigo en el game maker viene un ejemplo de  de lo que quieres me parece que ayer lo vi. Se llama isometria
Saludos
Título: Re:Orden de dibujado en mapa isometrico
Publicado por: Davirro en Junio 07, 2014, 11:00:49 AM

gracias eams1986 , estoy mirando el tuto y es el que me esta indicando el camino a seguir. En este fragmento de codigo muestra como se usa un array para ir dibujando en el orden correcto con "draw_sprite(gridCell[i, j], 0, xx, yy);" en los vectores X e Y. Asi se van superponiendo sin solaparse.

var gridDimensions;
gridDimensions = instance_find(objGridDimensions, 0);

var i, j;
for (i = 0; i < gridDimensions.gridWidth; i += 1)
{
    var st,c;
    st="";
    for (j = 0; j < gridDimensions.gridHeight; j += 1)
    {
        // Determine the x/y position for the sprite
        var xx, yy;
        xx = xorigin + (((i * 0.5) - (j * 0.5)) * sprite_get_width(templateTile));
        yy = yorigin + (((j * 0.5) + (i * 0.5)) * sprite_get_height(templateTile));
       
        draw_sprite(gridCell[i, j], 0, xx, yy);
    }
Título: Re:Orden de dibujado en mapa isometrico
Publicado por: celtic.sadness en Enero 13, 2015, 01:36:02 PM
El proceso/algoritmo de "renderizado" de sprites/tiles de forma isométrica es un poco más complicado que lo explicado.
Lo explicado sirve como base de trabajo y para escenarios en donde "ningún sprite" está encima/debajo de otro (los sprites solo están delante o detrás pero al mismo nivel/altura). Para este

caso el algoritmo es claro: seguir el orden de "pintado" +(Z-X).
¿Pero que pasa cuando tengo elementos flotantes a un nivel/altura Y?

a-) Si el/los sprite/s van exactamente encima de otros sprites sin solapar/intersectar con ningún adyacente de el/ellos (en el eje Y), se puede utilizar el orden de pintado +(Z-X)-Y.

b-) Si el sprite "solapa/intersecta" a más de 1 sprite al mismo tiempo (en el eje Y) TENEMOS UN PROBLEMA: En qué orden los pintamos?. Esto ya necesita de un algoritmo de ordenación complejo

para determinar el orden. Y no digamos cuando tengamos 30 sprites flotantes que hay que "integrar".

Yo, después de un largo análisis y un mucho sufrimiento conseguí implementar un algoritmo. Nunca habría imajinado la complejidad (sinceramente pensé que era más sencillo) de este "asunto" y

que fui descubiriendo a medida que empecé el desarrollo de mi primer juego 2.5D en cocos2D-x.
Adelanto que un algoritmo de este tipo necesita, en primer instancia, de una "comparación" de "todos con todos" pero es posible hacer una serie de optimizaciones y reducir el proceso de

cálculo muchísimo.

Un ejemplo (demo) del resultado del algoritmo puede verse aquí:
https://www.youtube.com/watch?v=tU1uJYdxUY4
https://www.youtube.com/watch?v=tBwxX44c6eE