Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: gecko on December 22, 2009, 08:05:53 PM

Title: Uno mas con mapas de durezas
Post by: gecko on December 22, 2009, 08:05:53 PM
bueno, vamos directo al problema...

Estoy intentando hacer un sistema de deteccion de durezas un poco mas complejo que el clasico de plataformas.

La idea es poder detectar suelos irregulares, y permitir el movimiento solo sobre determinana empinacion o inclinacion del terreno.

Un ejemplo seria un terreno asi:
(http://dl.dropbox.com/u/3292353/screensots/dureza.png)

La idea seria que el personaje lo recorra perfectamente en el centro,subiendo y bajando los desniveles,  pero sin poder llegar completamente hasta el borde.


Lo que por el momento estoy intentando implementar es por cada pixel de VELOCIDAD_X, compruebo que la altura sea menor a un valor determinado como la maxima altura que pueda escalar. Entonces ademas de un avance en X tambien se hacen pequeñas correcciones en Y basadas en esa altura.

Antes de seguir luchando con esto queria saber si conocen algun metodo efectivo para hacer esto.

Espero haberlo explicado bien...
Title: Re: Uno mas con mapas de durezas
Post by: SplinterGU on December 22, 2009, 09:12:39 PM
quizas mas que con un mapa de durezas deberias trabajar con algun arreglo de alturas, en base a la posicion horizontal x... dicha tabla podria ser calculada a partir del mapa de durezas... no se, es una idea... que puede tener sus grises...
Title: Re: Uno mas con mapas de durezas
Post by: Windgate on December 22, 2009, 09:27:43 PM
Es un problema complejo que no tiene una unica solucion... Te recomiendo que uses graphic_info ( ) para obtener la anchura y altura del grafico del personaje, y con ella calcular la altura del terreno al que te aproximas. Segun tu velocidad actual y la altura del terreno que tienes frente a ti puedes decidir si seguir adelante o bien interpretar que hay una "pared" y frenar.

Si empiezas a hacer algo palpable al respecto sube ejemplos please :P
Title: Re: Uno mas con mapas de durezas
Post by: Drumpi on December 23, 2009, 01:12:52 AM
Hombre, la solución de splinter es muy eficaz si hablamos de suelos sin nada encima sobre lo que posarse, es decir, si no hay varios pisos.
Pero creo que la única solución a este problema es la de recorrer el borde superior del suelo y detectar cuando se sube más de la cuenta, ya que hablamos de terrenos irregulares. Si existiese algún patrón, se podría simplificar en base a estos, ejemplos como tiles, o funciones matemáticas sencillas (parábola, linea recta, sinusoide...).
Title: Re: Uno mas con mapas de durezas
Post by: Futu-block on December 23, 2009, 09:44:02 AM
y entonces la inclinacion (angle) no tendria nada que ver??? porque se puede poner que al seguir el suelo que empiece a inclinarse se incline el personaje, y al llegar a una cierta inclinación se impide seguir avanzando...

digo yo...
Title: Re: Uno mas con mapas de durezas
Post by: Drumpi on December 23, 2009, 01:46:12 PM
Hombre, la técnica sencilla es que el personaje puede subir unos determinados números de pixels, lo que ayudaria a hacer pequeñas escaleras. Ten en cuenta que estamos trabajando con rampas de distinta inclinación a nivel infinitesimal: altura de 1 pixel equivale a 45º de inclinación, 2 pixels ya son 60º, 3 pixels ¿75º?...

Angle no tiene nada que ver con esto, eso es la parte gráfica, y por lo general conviene tenerla apartada de la parte del motor (por ejemplo, en un pong es mejor comprobar las posiciones de los objetos en lugar de usar collision para los rebotes).

Aunque ahora que lo dices, hace tiempo que pensé en ello, y uno de los métodos que se me ocurrió fue la de recorrer la superficie del suelo en ambas direcciones unos pocos pixels, así se puede determinar con mayor precisión la inclinación del terreno... pero puede generar cierto margen de error si el radio de curvatura del suelo cambia mucho, y puede dar problemas si nos encontramos con un barranco o una pared.
Title: Re: Uno mas con mapas de durezas
Post by: SplinterGU on December 23, 2009, 02:56:10 PM
la inclinacion podria tener que ver si queres meterle fisica, y la altura a llegar dependeria de la velocidad, pero todo depende de que quieras hacer, si tu personaje puede trepar, si tiene cierta adherencia o no... etc...

con pocos datos es un poco dificil sugerir correctamente...
Title: Re: Uno mas con mapas de durezas
Post by: gecko on December 23, 2009, 03:57:04 PM
la idea seria lograr imitar un movimiento como el que tenia Earth Worm Jim, que caminando se iba adptando a la supeficie sin problemas...

El salto lo tengo con una gravedad simple y funciona bien, por lo que esas diferencias del terreno las baja sin problemas. Los problemas empiezan cuando tiene que subir en esas rampas y desniveles.

Y por ahora el sistema que me parece adecuado seria el de ir comprobando en el avance, por cada pixel horizontal, la altura en vertical... y despues vere si complia mucho al rendimiento tener 3 bucles (uno para la gravedad y otros 2 para ese avance) en cada frame del personaje...

Muchas gracias por las respuestas muchachos!

cualquier avance les cuento!...
Title: Re: Uno mas con mapas de durezas
Post by: Windgate on December 23, 2009, 06:17:36 PM
Si solamente quieres eso puedes usar el modulo gravedad.prg de mi Just Fantasy, no se si lo has visto, pero se adapta a los suelos a la perfeccion... Incluso tiene en cuenta posibles cambios de tamaño en el grafico, incluso cambios en la variable size.

Busca Just Fantasy en el buscador y baja cualquier version.
Title: Re: Uno mas con mapas de durezas
Post by: Drumpi on December 24, 2009, 02:28:27 AM
Pues yo cuento dos bucles: el que va siguiendo la superficie del suelo pixel por pixel horizontal (mientras se pueda mover), y el que busca la altura en cada pixel (si se mueve hacia la derecha, comprueba el tile de la derecha; vacío, busca hacia abajo; lleno, busca hacia arriba), la gravedad bastaría con calcular la posición final y compararla con la altura obtenida con la función anterior.

Rendimiento: en PCs modernos no hay problema, en máquinas más ajustadas... bueno, con Fenix 092a, pintaba pixel por pixel una imagen de 320x240 en GP2X a 200MHz a 30 fps o menos, haz tus cuentas.
Title: Re: Uno mas con mapas de durezas
Post by: gecko on January 16, 2010, 08:59:49 AM
ya pude conseguir una solucion que me convence bastante...

Lo que hice fue que para cada pixel horizontal que avanza cuente la cantidad de pixels suelo que hay en vertical para arriba, y si estos son menores a una cierta tolerancia recien ahi avanza.

Lo hice solamente con altura hacia arriba ya que del descenso se encarga la gravedad por separado, y en combinacion funcionan perfecto.

Ahora que lo veo es algo simple, pero me costo varios dolores de cabeza poder lograr el movimiento, asi que me gustaria compartirlo con todos a ver que dicen!

(PD: Espero que los comentarios en el codigo sean de ayuda, la intencion no era dejarlo tan sobrecargado)