Caerse de una plataforma en un beatemup

Started by DCelso, October 20, 2009, 02:30:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Creo que entre todos me habeis dado una idea, voy a ver si la pongo en marcha.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk


Drumpi

Y digo yo ¿No es más fácil hacer una representación del terreno desde una vista aerea en lugar de caballera? es decir, el mapa de durezas representa el escenario, pero en vez de usar esa vista en picado haces el mapa de durezas como si estuvieras mirando desde arriba del todo, así cada pixel representa la altura de esa posición y puedes trabajar como si fuera un juego de plataformas.

Si no te queda claro, puedes hacerlo como hasta ahora, pero en lugar de dibujar el coche (paredes, y techo), dibuja la "sombra": cuando el personaje esté en la posición (x,y) no podrá pisar el color morado a menos que esté a una altura z de ¿10 pixels?, si está a esa altura y detecta que la sombra pasa de morado a blanco sabrá que está en el aire y debe bajar hasta el suelo.
Obviamente tu personaje deberá tener unas coordenadas X2, Y2 y Z2 en el mundo "caballera" y otras en la pantalla (básicamente:
X=X2;
Y=Y2+Z2;)
No se si me explico.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Por mi parte también había llegado a la conclusión de la sombra xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Pues lo intenté pero no me salió. Me hace cada cosa rara.
dejo aqui el ejemplo que estoy siguiendo, he cambiado todas las variables con respecto a la versión anterior para que se compendan más facilmente su utilidad, además he cambiado la fase para que se vea mejor el cambio de plataforma, ahora no es un coche, pero ahora me pasa que por más que leo el código no entiendo porqué al caerse de la plataforma baja más de la cuenta. Para ver el problema subid saltando al coche, bajad saltando del coche, subid saltando al coche y bajad andando del coche. resulta que en este ultimo caso la posición es diferente.
A ver si te referias a esto Drumpi.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

splinter_work

perdon, no habia visto el attach... solo habia visto la porcion de codigo... luego le hecho un ojo...

DjSonyk

Creo que el problema esta aqui...

estado = ESTADO_DESCENDIENDO;
     z_jump = tope_en_salto;  // le das el mismo valor que si estuviera saltando y el salto es mas alto que la caida....

creo por que lo he mirado por encima y parece que todo lo demas esta bien,vamos eso es lo que me llamo la atención.

DCelso

He probado varios valores pero ninguno me funcionó,0 , el mismo pero negativo, la mitad, etc, creo que falla algo en la lógica pero no logro verlo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

#24
Descargo a ver qué has hecho, estuve pensando que la dureza de suelo debería indicar la "altura" a la que se encuentra la plataforma... Así es posible determinar en el aterrizaje (De la sombra) cuánto debe subir o bajar.

Es una sugerencia de otras tantas, aunque cualquier idea supongo que te liará más todavía con la monstruosidad que llevarás ya en mente :o

Estoy por empezar yo también desde 0 con este problema, pero 2 personas haciendo la misma cosa es 50% de rendimiento :P

EDIT: Ciertamente, lo he visto y la altura de caída no funciona muy bien :S

No lo había comentado, pero tenía la idea (Y la mantengo) de tener una dureza así: En los bits R la altura relativa del plano, en los bits G la información del "rail" horizontal en el que se está y en los bits de B la información del "rail" vertical en el que se está.

Así se podría gestionar con exactitud tanto las bajadas de plataforma horizontal como verticalmente.

No sé si me explico... Debería funcionar bien, pero dibujar el mapa de durezas sería trabajo de orientales.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

splinter_work

#25
vas a tener que reescribir todo tu codigo, no me gusta para nada eso...

sugerencias...

1) plataformas asociadas a un color de dureza
2) plataformas asociadas a una altura base
3) las coordenadas Y del personaje deben ser relativas a la altura base de la plataforma actual
4) cuando saltas o cuando caes, tenes que ir comprobando colision con otras durezas (de piso y de paredes/bordes)
5) cuando caes sobre una dureza, tenes que obtener su base, y en relacion a este valor y la Y inicial en relacion a la plataforma origen, ubicar el personaje en la Y en relacion a la base nueva. Cuando tu "Y" alcanza el valor calculado, entonces ahi debe dejar de caer o saltar.
fijate que cuando saltas sobre la plataforma mas alta, no se estas teniendo en cuenta la altura de la nueva plataforma, sino que se posiciona en la misma "Y" de origen, lo cual no esta bien.
6) usar puntos de control en vez de un objeto "centro_punto" (o algo asi).
7) tendrias que agregar 2 puntos de control mas, uno izquierda y otro derecha... para calcular cuando se mueve en esas posiciones... o incluso usar un colision contra el mapa de durezas.
8) fijate que cuando saltas tambien tenes que colisionar contra los bordes, para evitar moverte en diagonal sobre un plano que en teoria no se puede.
en este caso, en la diagonal formadas entre el area blanca y el area rosa, deberia haber otra dureza mas que indique la pared, y mientras la dureza de que estas chocando contra esta, no mover la coordenada "X".
9) creo que queda claro que la funcion obtener_siguiente_elevacion o algo asi, no deberia ir...

creo que con estos tips tenes algo para empezar.

DCelso

Gracias, voy a ver si reescribo el código.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Readaptado el código, añadido nuevo color en la dureza, ahora sí va bien la caída andando. He añadido  4 puntos de control. He añadido unos writes para mostrar datos en pantalla.

Ahora el problema siguiente que me encuentro es que desde la plataforma de abajo puedo ir andando hasta la pared de la plataforma de arriba, ¿como controlo eso?.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk

Buen trabajo DCeslo,el remate final...
Pues tienes que tener un punto de referencia,digas el de abajo ,sumarle desde ese punto hasta donde quiereas que sea el final de Marge ,digamos la punta del zapato,y ahi ya controlas que a ese punto llegue al color que tienes verde que no la deje pasar al no ser que este saltando,si aun te quedara Marge lejos de la pared seria perfilar el verde hasta que tengas el grosor de la pared deseada....Animo,te hecharia una mano ,pero me has vuelto loco con el codigo de antes.... xD

Windgate

Resolver lo que propone DCelso es uno de los típicos problemas para volverse loco... Dan ganas de pedir que hagas un motor o algo que abstraiga al usuario de las complejidades, pero realmente tengo ganas de enfrentarme "a pelo" al problema. Estoy deseando ver tu ejemplo, pero a la vez siento ganas de intentar programarlo desde 0 :P

Todo un reto DCelso, sos groso, sabelo.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es