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.
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
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.
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.
Amigo en el game maker viene un ejemplo de de lo que quieres me parece que ayer lo vi. Se llama isometria
Saludos
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);
}
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