Bennu Game Development

Foros en Español => Proyectos => Topic started by: Yawin on June 09, 2011, 08:47:26 AM

Title: Movimiento en profundidad
Post by: Yawin on June 09, 2011, 08:47:26 AM
Bueno, estaba yo, tranquilamente, pensando en que mi próximo proyecto quiero que sea una aventura gráfica (al más puro Old Style xDD) y claro, si lo programo todo en 2D, necesito buscar un efecto de profundidad.

Por eso, mientras estaba en clase, he estado trabajando en una chorradilla que toma un punto de la pantalla, previamente asignado, como punto de fuga. El problema son los desplazamientos, que no me van bien. Por eso he pensado, que podemos ir afinándolo entre todos para poder tener algo sencillo con lo que tener profundidad en nuestor juego, sin meternos cosas tan gordas como modo 7 o así.

Link: http://www.mediafire.com/?4qg1t0nuo0d9fe9

Os explico el funcionamiento:

Primero se asignan las coordenadas del punto de fuga a la array pfuga[2] (primera casilla=x, segunda casilla=y). Luego, se asigna la profundidad.

La idea que he tenido para la profundidad es el size que tiene nuestro personaje en el punto de fuga. Cuanto más te alejas, más aumenta tu size y cuanto más te acercas, más se reduce.

Luego, inicializamos las coordenadas de nuestro personaje y llamamos a su sombra (el gráfico que lo representa). El gráfico está en un proceso a parte, porque nuestro personaje se mueve a base de calcular ángulos y distancias, y si estuviese en él mismo el gráfico, saldría girado.

Ahora, ya sólo nos queda calcular su tamaño y en base a qué tecla se pulse, calcular su movimiento.
Title: Re: Movimiento en profundidad
Post by: FreeYourMind on June 09, 2011, 09:12:18 AM
Interesante, pero hay algun error en el movimiento porque al principio te dejá subir y bajar en el eje YY y despues ya no, y solo te permite mover en el eje X
Title: Re: Movimiento en profundidad
Post by: Yawin on June 09, 2011, 09:28:27 AM
Si lo se, es por eso que he puesto que si alguien me ayuda aceptaré su ayuda encantado xDD
Title: Re: Movimiento en profundidad
Post by: KeoH on June 09, 2011, 12:15:07 PM
Quote from: yawin on June 09, 2011, 08:47:26 AM
en que mi próximo proyecto quiero que sea una aventura gráfica (al más puro Old Style xDD)

Nooooo xDD llevo yo una semana planteando ni proyecto para hacer una aventura grafica d corte clasico porq me encantan y no habia ninguna xDD
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 01:31:58 PM
no me parece apropiada la tecnica, si te moves de costado solamente, el personaje tambien cambia de tamaño.

yo creo que deberias trabajar con un mapa de durezas para usarlo de camino, y en ese mapa de durezas uses un color determinado que te indique el size del personaje, de esta forma matas 2 pajaros de 1 tiro: caminos y profundidad.
Title: Re: Movimiento en profundidad
Post by: Yawin on June 09, 2011, 01:39:31 PM
No me gusta, porque.... no me gusta xDD
No se explicarme. Si lo hago a´si, a nada que tenga un mapa con una profundidad seria la gama de colores para las durezas sería enorme.
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 02:02:29 PM
Quote from: yawin on June 09, 2011, 01:39:31 PM
No me gusta, porque.... no me gusta xDD
No se explicarme. Si lo hago a´si, a nada que tenga un mapa con una profundidad seria la gama de colores para las durezas sería enorme.

no, para nada, no tiene que ser enorme, un mapa de durezas no tiene porque tener infinitos colores, con 256 te deberia alcanzar.

de hecho necesitas tener este metodo, porque no siempre vas a tener escenarios como el de la calle que pusiste, podes tener plataformas o superficies que esten mas elevadas y a la misma altura fisica de la pantalla tener un plano mas alejado, por ejemplo, imaginate una casa donde te subis al techo, el techo de la casa esa a la misma altura que el suelo/pasto del fondo de la casa que se encuentre fisicamente en la misma coordenada "y" del techo de la casa, y obviamente en esos casos tamaño debe ser diferente.
Title: Re: Movimiento en profundidad
Post by: KeoH on June 09, 2011, 02:22:42 PM
Quote from: SplinterGU on June 09, 2011, 02:02:29 PM
Quote from: yawin on June 09, 2011, 01:39:31 PM
No me gusta, porque.... no me gusta xDD
No se explicarme. Si lo hago a´si, a nada que tenga un mapa con una profundidad seria la gama de colores para las durezas sería enorme.

no, para nada, no tiene que ser enorme, un mapa de durezas no tiene porque tener infinitos colores, con 256 te deberia alcanzar.

de hecho necesitas tener este metodo, porque no siempre vas a tener escenarios como el de la calle que pusiste, podes tener plataformas o superficies que esten mas elevadas y a la misma altura fisica de la pantalla tener un plano mas alejado, por ejemplo, imaginate una casa donde te subis al techo, el techo de la casa esa a la misma altura que el suelo/pasto del fondo de la casa que se encuentre fisicamente en la misma coordenada "y" del techo de la casa, y obviamente en esos casos tamaño debe ser diferente.


si .. algo asi tenia yo pensado .. sepodria poner una dureza con un degradado por ejemplo de rojo, con los colores azul y verde a 0 ... y ligar el size y la z del personaje a la cantidad de rojo q haya en ese punto ... por ejemplo .. cuanto mas rojo sea el punto, mas profundo estará el personaje (en z para q se le puedan poner objetos delante) y mas pequeño sería el graph
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 02:38:36 PM
si, pero sencillamente el size no significa que tenga que ser con incrementos de 1, cada color puede significar x2 o x3 con respecto al size, y con eso 256 colores de tonos creo que es mas que suficiente... creo que seria bueno tener 2 mapas de durezas, el de los caminos y el del tamaño, asi tenemos 256 opciones de tamaño solo para ese fin, tambien debo decir que tampoco cada pixel de este mapa necesita representar un pixel del mapa o pantalla, puede representar varios, de la misma forma que usamos un mapa de caminos.
Title: Re: Movimiento en profundidad
Post by: KeoH on June 09, 2011, 03:12:17 PM
si .. igual con 10 variaciones del color del tamaño tienes mas q suficiente, imagina q el tamaño según los cambios de color vayan siendo algo así: 100,99,97,93,82,70,60,45,30,20.   la ultima posición de size tampoco tendría q ser 0. ... o que incluso sean valores superiores a 100 si se esta acercando a la cámara. Aunq la "velocidad" de la variación del size debería ser distinta según la perspectiva del escenario.

yawin no querías ideas? xDD
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 03:17:17 PM
Quote from: KeoH on June 09, 2011, 03:12:17 PM
si .. igual con 10 variaciones del color del tamaño tienes mas q suficiente, imagina q el tamaño según los cambios de color vayan siendo algo así: 100,99,97,93,82,70,60,45,30,20.   la ultima posición de size tampoco tendría q ser 0. ... o que incluso sean valores superiores a 100 si se esta acercando a la cámara. Aunq la "velocidad" de la variación del size debería ser distinta según la perspectiva del escenario.

yawin no querías ideas? xDD

por supuesto, con el modelo que propongo todo esta cubierto, en el caso de size, puede que en algunos casos tengas size 0, imagina un personaje que sigue un camino que va a lo lejos y se pierde en un punto en una cueva... aunque tambien es cierto que la secuencia podria terminar ahi en un size 10 o lo que sea.

pero bueno, ahi esta la tecnica, como se use depende de la necesidad.

yo creo que es la forma mas practica de hacerlo.
Title: Re: Movimiento en profundidad
Post by: La momia que fuma on June 09, 2011, 06:22:56 PM
Quote from: yawin on June 09, 2011, 08:47:26 AMEl gráfico está en un proceso a parte, porque nuestro personaje se mueve a base de calcular ángulos y distancias, y si estuviese en él mismo el gráfico, saldría girado.

Tienes xadvance para evitar eso.

Yo lo haría de una forma mucho más simple...calcular size en base a "y" y a correr...se podría hacer en una sola linea, solo habría que tener en cuenta la y del horizonte (la y máxima que podra alcanzar el personaje) y algún valor corrector que multiplique o divida el resultado (Que dependera de la vista del escenario, altura de la camara, etc), ambos dependerán de en que pantalla estemos.
Title: Re: Movimiento en profundidad
Post by: Yawin on June 09, 2011, 06:56:14 PM
ya, pero esque si quieres ir recto, realmente no tienes que ir recto, tienes que ir hacia el punto de fuga. Por tanto, tienes que calcular hacia donde tienes que avanzar. No se si me explico. No es sólo el tamaño.
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 07:04:32 PM
yo te sugiero que agarres el monkey island, el dia del tentaculo, o el goblins y le des duro y parejo...

vas a ver que eso del punto de fuga no aplica.
Title: Re: Movimiento en profundidad
Post by: La momia que fuma on June 09, 2011, 07:45:34 PM
Quote from: yawin on June 09, 2011, 06:56:14 PM
ya, pero esque si quieres ir recto, realmente no tienes que ir recto, tienes que ir hacia el punto de fuga. Por tanto, tienes que calcular hacia donde tienes que avanzar. No se si me explico. No es sólo el tamaño.

En una aventura gráfica vas a donde pinchas con el ratón :P
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 07:59:22 PM
mira estos escenearios

(http://www.abandonia.com/files/games/52/Goblins%203_1.png)

(http://kingofgng.com/media/20090710_gobliins2_3.png)

si el personaje se encuentra sobre la repisa (donde esta la soga y donde esta la escalera), no es el mismo tamaño que si se encuentra al lado de los huecos de la puerta, incluso sobre la misma Y, y tampoco el tamaño depende de la distancia al punto de fuga.

estas cosas no las puedes hacer calculando, estas cosas se programan con datos predefinidos (siempre hablando de aventuras graficas).
Title: Re: Movimiento en profundidad
Post by: FreeYourMind on June 09, 2011, 08:21:03 PM
http://www.youtube.com/watch?v=DMuH8gLtW8I
Title: Re: Movimiento en profundidad
Post by: Yawin on June 09, 2011, 09:12:33 PM
En la primera imagen el punto de fuga está claro. el tema es que el punto de fuga está en un plano en el infinito. Si tú estás desplazándote por un plano que está a una distancia x del punto de fuga: todos los puntos de ese plano están a la misma distancia del punto de fuga, y por tanto el tamaño no varía.

El tamaño varía cuando cambias de plano.

El tema es que yo no quiero trabajar con planos, porque no quiero usar 3D. Para eso, uso modo 7 y fin. Lo que busco es emular eso pero contando sólo con x e y
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 09, 2011, 11:17:15 PM
pues no esta claro en la primera imagen, mira la alacena que donde esta el dragoncito y los tarros y el piso que esta a la misma altura sobre la derecha de la imagen, los personajes sobre esa alacena, deben ser grandes, y los que estan en el piso de piedra sobre la derecha se deberian ver mas chicos.

ahi no podes tener 1 punto de fuga que funcione.

bueno, no importa, como sea, muestranos tu idea funcionando cuando tengas avances.
Title: Re: Movimiento en profundidad
Post by: Drumpi on June 11, 2011, 07:44:20 PM
Splinter, esa imagen no tiene un punto de fuga ¡tiene dos! :D
Pero eso es irrelevante, por lo general, las aventuras gráficas se permiten mantener el size intacto para ahorrar recursos, sobre todo si la distancia en profundidad es poca.

Pero de todas formas, el tamaño depende de la distancia hacia la linea del horizonte. Supongamos una pantalla de 200 pixels, con la linea del horizonte en el 100, he comprobado que si el personaje se mueve hacia el fondo de manera que queda en y=150 (a mitad de camino del horizonte), su tamaño debe ser del 50%, si está a 125 (a un cuarto del camino del horizonte) su tamaño debe ser un 25%... O sea, que la distancia que lo separa del horizonte respecto a su posición en el plano cercano determina el tamaño, tanto del personaje como de la distancias (por lo que si tiene un 50% de su tamaño, también se desplaza la mitad que en primer plano).

Pero esto tiene un par de pegas: si cambia la altura del personaje, los cálculos pueden no funcionar (sobre todo, cuando su altura es la misma que la de la linea del horizonte, en el ejemplo, un salto de 100 pixels de altura). Y que no es un escalado "real", sólo funciona cuando se toma el foco en el centro de la pantalla, cuando sólo hay un foco (no hay problema, siempre existe un foco justo delante del que observa, otra cosa es que coincida con las paredes de la casa). Si hay dos focos pasa como me pasaba a mi con el modo7 en el Drajon Lol y las increibles paredes menguantes :D :D :D
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 11, 2011, 07:52:16 PM
Quote from: Drumpi on June 11, 2011, 07:44:20 PM
Splinter, esa imagen no tiene un punto de fuga ¡tiene dos! :D
Pero eso es irrelevante, por lo general, las aventuras gráficas se permiten mantener el size intacto para ahorrar recursos, sobre todo si la distancia en profundidad es poca.

Pero de todas formas, el tamaño depende de la distancia hacia la linea del horizonte. Supongamos una pantalla de 200 pixels, con la linea del horizonte en el 100, he comprobado que si el personaje se mueve hacia el fondo de manera que queda en y=150 (a mitad de camino del horizonte), su tamaño debe ser del 50%, si está a 125 (a un cuarto del camino del horizonte) su tamaño debe ser un 25%... O sea, que la distancia que lo separa del horizonte respecto a su posición en el plano cercano determina el tamaño, tanto del personaje como de la distancias (por lo que si tiene un 50% de su tamaño, también se desplaza la mitad que en primer plano).

Pero esto tiene un par de pegas: si cambia la altura del personaje, los cálculos pueden no funcionar (sobre todo, cuando su altura es la misma que la de la linea del horizonte, en el ejemplo, un salto de 100 pixels de altura). Y que no es un escalado "real", sólo funciona cuando se toma el foco en el centro de la pantalla, cuando sólo hay un foco (no hay problema, siempre existe un foco justo delante del que observa, otra cosa es que coincida con las paredes de la casa). Si hay dos focos pasa como me pasaba a mi con el modo7 en el Drajon Lol y las increibles paredes menguantes :D :D :D

es lo que yo digo, no puedes hacer un algoritmo generico basado en 1 punto de fuga, no sirve, por eso puse esa imagen para ejemplificarlo, ademas de que el algoritmo no sirve porque en el algoritmo que mostro yawin, si te moves de izquierda a derecha el personaje cambia el tamaño y no sirve para casi ninguna aventura grafica.

totalmente de acuerdo, pero las aventuras graficas que modifican el tamaño de los personajes (como has dicho, no todas lo hacen), no se basan en algoritmos automaticos, los graficos se dibujan con sizes predefinidos.
Title: Re: Movimiento en profundidad
Post by: Futu-block on June 11, 2011, 09:37:17 PM
tiene tres puntos de fuga...
:D
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 11, 2011, 11:34:14 PM
Quote from: Futublock on June 11, 2011, 09:37:17 PM
tiene tres puntos de fuga...
:D

posiblemente, lo que si se ve es que tiene mas de 1.
Title: Re: Movimiento en profundidad
Post by: Yawin on June 13, 2011, 06:12:25 AM
Esta tarde os subo la nueva versión. Funciona de rechupete, aunque tiene un pequeño bug.
Title: Re: Movimiento en profundidad
Post by: Yawin on June 13, 2011, 09:33:37 AM
Siento el doblepost:

Pensaba que tardaría en acabarlo más rato, pero aquí está. Una nueva versión, creo que bastante buena, y con un código notablemente más limpio.

http://www.mediafire.com/?ev4mw6qf2g6u8c2

Nota: Si se pega el objeto a una esquina y se trae hacia la pantalla el objeto, no parece seguir la linea de fuga, pero, en realidad, lo que ocurre, es que tanto el mapa como el mapa de durezas están hechos con el paint y, por tanto, no mantiene las proporciones como debería xDD
Title: Re: Movimiento en profundidad
Post by: peterpollito on June 14, 2011, 09:03:02 PM
funciona de rechupete! Karma!
Title: Re: Movimiento en profundidad
Post by: Yawin on June 16, 2011, 08:51:46 AM
Muchas gracias. Ahora estoy mirando como hacer un efecto de scroll, para poder hacerjuegos estilo paper mario y así.
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 16, 2011, 03:09:10 PM
ahora es otra cosa... te quedo muy bien!
Title: Re: Movimiento en profundidad
Post by: Yawin on June 16, 2011, 04:05:50 PM
¿Ahora se entiende a qué me refería? Esque a veces no me explico bien xDDDD
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 16, 2011, 04:18:38 PM
se entendia a que te referias, pero eso que has hecho solo sirve para modelos de un solo nivel de altura... y como estaba antes, el del calcular todo segun el punto de fuga estaba mal, ahora solo cambias sobre el movimiento vertical, entonces ahora esta bien en ese nivel.

quizas deberias agregar 3 variables locales, x0,y0,z0, y trabajar sobre estas a nivel usuario, y que en tu engine bases la proyeccion (size) en base a la z0, y a nivel final antes del dibujado, transformes x=x0, y=se base en z0 (profundidad) y y0 (altura), asi puedes por ejemplo hacer un personaje que pueda saltar sin verse afectado por la proyeccion, ya que si un personaje salta vas a cambiar su "y" y si eso pasa se vera afectado por el punto de fuga y mientras salte se vera mas chico.

no se si me explico.
Title: Re: Movimiento en profundidad
Post by: Yawin on June 16, 2011, 04:27:16 PM
Si, pero esque para eso, ya tenemos el modo7 xDDD
Lo que yo quería era algo más simple. Para poder desplazarse por ese plano.
Title: Re: Movimiento en profundidad
Post by: Windgate on June 16, 2011, 04:29:18 PM
Splinter tiene razón con lo que dice de la Y, en su día buscando solución a una casa parecida decidí hacer que la propiedad de profundidad se obtuviese de la "sombra" del personaje, para evitar el problema del salto, por si quieres ideas para plantear una solución :P
Title: Re: Movimiento en profundidad
Post by: Yawin on June 16, 2011, 04:31:33 PM
Como ya dije, esta parte la tengo pensada para aventuras gráficas. Si quisiese saltar, ya me lo plantearé entonces xDD

Por supuesto, siempre se aceptan colaboraciones ^__^
Title: Re: Movimiento en profundidad
Post by: SplinterGU on June 16, 2011, 04:32:06 PM
Quote from: yawin on June 16, 2011, 04:27:16 PM
Si, pero esque para eso, ya tenemos el modo7 xDDD
Lo que yo quería era algo más simple. Para poder desplazarse por ese plano.

no es lo mismo, pero son ideas, claro que tu has lo que creas que necesitas y no te compliques con ideas que tiramos por aca.