Superposición de cosas

Started by Yawin, August 26, 2012, 07:37:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Yawin

¡Hola a todos!
Tengo un pequeño problema que no se me ocurre cómo solucionar. Estoy intentando desarrollar un "motor" para una aventura gráfica (sí, ese proyecto no lo tengo olvidado) y a la hora de mover al personaje por la pantalla me pasa un problema, que los objetos o se superponen al personaje o se quedan atrás. Digamos que no funcionan como objetos normales xDD


Se me han ocurrido cientos de formas para hacerlo, pero ninguna ha funcionado.


Esta es una demostración de lo que me pasa:
http://www.youtube.com/watch?v=h-_nOMZftFo
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

FreeYourMind

#1
hhaahhah me parto xD perdona pero me he reido mogollon :)

Es normal, tu grafico de la mesa tiene una z menor, no me digas que ahora bennu tiene que adivinar cuando tu muñeco tiene que estar delante o detras de la mesa xDD

Eso lo tienes que programar tu, en primer lugar el muñeco no debe pasar la mesa hacia nosotros cuando pulsas abajo, yo pondria como un mapa de colisiones para las patas de la mesa, y otro que estuviera en los pies del muñeco, con esto tanto si estas detras y le das abajo el muñeco quedaria detras de la mesa, y si vienes desde el fondo de pantalla hacia la mesa, este quedaria a nivel de las patas de la mesa, ya que sus pies habrian colisionao con ella. ya solo faltaria ajustar la Z, si tu muñeco tiene el valor de Y mas alto que la mesa le pondria una z menor y vice versa, con esto ya simularias la realidad, para esto ultimo tambien podrias utilizar puntos de control en partes del grafico del muñeco o la mesa.

Yawin

Claro, a ver el tema de la Z ya lo se. La cosa es que depende de donde se ponga la mesa tiene que estar delante o detrás, y no se me ocurre una norma general para definirlo.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

FreeYourMind

mira el dibujo, a ver si con esto entiedes mejor. tienes un grafico hijo para la mesa que es el rojo (puede ser un recorte de la mesa, y la mesa ser 2 graficos, o ser un mapa de durezas), y tienes lo mismo para el muñeco. ahora solo tienes que comprobar que los graficos hijos colisionen, con esto ya esta, solo falta controlar las Z'z con esto, dependiendo de la posición de los pies del muñeco, si estan mas abajo o arriba que las patas de la mesa. y esto para todos los objetos que pongas xD




Yawin

Sí, creo que empiezo a entender. Mañana te comento si lo consigo xDD
¡Gracias!
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

FreeYourMind

De nada, en tu caso yo usaria mapas de durezas, para la mesa seria en forma de V, o sino recortas el fondo de la mesa en una V de un pixel y te apañas igual, al comprobar la colision de los 2 pies del muñeco con esta V.

KeoH

En mi minimotor isometrico hice lo que comenta Free .. de hacer que la Z del personaje (y cualquier objeto en pantalla) se calcule en funcion de su Y.

http://youtu.be/yqosozqBCgY

gecko

podes centrar todos los graficos a "los pies" o "al suelo" y hacer las comprobaciones tomando eso como referencia. creo que seria lo mas simple :P
Torres Baldi Studio
http://torresbaldi.com

Yawin

Quote from: KeoH on August 26, 2012, 09:00:52 PM
En mi minimotor isometrico hice lo que comenta Free .. de hacer que la Z del personaje (y cualquier objeto en pantalla) se calcule en funcion de su Y.

http://youtu.be/yqosozqBCgY


¿Por casualidad no habrás liberado código del que robar algoritmos encontrar inspiración, no? La verdad es que dejando a un lado las coñas, me vendría muy bien un motor estable al que echarle uno de esos vistazos que los hombres echamos a las buenas mujeres (you know what I mean xD).
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

KeoH

#9
Aqui tienes el codigo ... tambien incluye un par de chanchullos pa q se pueda jugar con mando si esta conectado y sino con teclado.

Las funciones importantes aqui creo q eran Pinta() y set_zeta()

Le faltaba a este codigo un poco de orden xD es un caos...

Yawin

#10
¡Muchas gracias!
Si te digo la verdad, no me he enterado de casi nada de tu código. Me temo que usamos metodologías demasiado distintas xDD Pero gracias a la lectura de tu código he tenido una idea genialosísima.

Edit:
Os explico lo que se me ha ocurrido porque hasta mañana no voy a poder probarlo.

En todas las imágenes hay un patrón de profundidad. Es decir, partiendo de un punto todas las cosas se ordenan en profundidad respecto a este. Cuanto más cerca estás de este punto, más profundo estás en el dibujo. A veces, este punto es la esquina de la imagen. Y a veces es una línea entera. Depende de la orientación de la imagen.

Por eso, se me ha ocurrido que cuando genere un objeto, le voy a pasar las coordenadas de ese punto (x0, y0) y las coordenadas del punto contrario (es decir, el punto que está delante del todo)(x1,y1). La Z máxima posible será la distancia entre esos dos puntos y la Z mínima 0. Así que la Z de un objeto será:
z=fget_dist(x0,y0,x1,y1)-fget_dist(x0,y0,x,y);

¿Os parece que puede funcionar? O ver si mañana le puedo meter mano.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

FreeYourMind

en primer lugar le tienes que poner la señal negativa, ya que cuanto z mas negativo mas cerca de nosotros esta. Eso funciona, lo que hace es que los ojetos mas grandes queden siempre por encima de los pequeños, lo que no es funcional, porque puedes poner objetos mas pequeños que tu personaje y que deban estar delante. Eso puede ser practico para un juego estilo Arabian fight donde diminuyes el muñeco com zoom out al afastarse de la pantalla.

http://www.youtube.com/watch?v=wxYQhfI_d3g