deteccion de colosiones con plataformas

deteccion de colosiones con plataformas

Notapor spartan1217 » Sab Feb 23, 2013 4:07 am

hola amigos desde hace un mes he estado haciendo practicas de aplicaciones sencillas para probar codigos de juegos que he estado analizando.pero entonces me dicidi en hacer un juego de plataformas y es hay cuando aparece mi primer problema.resulta que quiero hacer que mi personaje salte sobre plataformas pero hasta ahora el salto que habia logrado hacer es que el personaje salta y cae pero se detiene siempre en la misma posicion en el eje y . esto lo he hecho viendo codigos fuentes pero nunca logre entender bn que es lo que pasaba con las variables involucradas en el salto. lo que quiero hacer es que mi sprite( heroe ) al saltar hacia una plataforma se quede ensima de ella y no se valla de largo. la verdad es que no se muy bn lo que he estado haciendo en este ultimo mes ya que solo veo coidgos pero no se muy bn lo que hacen, yo soy estudiante de primer semestre de ingenieria de sistemas y apenas estoy aprediendo en esto de los juegos. es por eso que me puse a buscar por la web y me tope con ejemplos que me condujieron a esta web. entonces si alguien puede hacerme el inmenso favor de ayudarme con mi problema se lo agradeceria mucho.el algoritmo de salto sobre plataformas pueden darmelo en seudocodigo o tambien en c++, he visto por hay que les gusta usar SDL se un poco como funciona esa libreria asi que cualquier ayuda es valida, me gustaria que me dijieran que pasa con las diferentes variables al momento del salto y la colision de con las plataformas. :|
spartan1217
 
Mensajes: 4
Registrado: Sab Feb 23, 2013 3:48 am

Re: deteccion de colosiones con plataformas

Notapor Barajas » Dom Feb 24, 2013 12:13 am

Es bastante simple entender la lógica del salto a una plataforma.

Miremos el mundo real. Sabes que hay una fuerza que te atrae hacia el piso llamada "gravedad"
Y esa fuerza funciona para todos los objetos.
¿Qué pasa si te subes sobre una mesa?
La gravedad continua en ese lugar, te continua jalando al piso. Solo que la mesa, te "detiene" de caer.

Si fuera una receta de cocina, seria:

while el_mundo_siga:
if nada detiene la caída del personaje:
el personaje cae, actualizar su posición



La gravedad jala a nuestro personaje, pero el piso detiene su caída.
Imagen
Imagen

¿Como sabemos que algo detiene la caída de nuestros personajes?
Revisamos si los pies de nuestro personaje, están chocando con alguna plataforma.

¿Qué es caer?
La posición y del personaje cambia.

¿No estoy seguro si eso responda tu duda?
Si tienes dudas, pregunta :)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: deteccion de colosiones con plataformas

Notapor spartan1217 » Dom Feb 24, 2013 2:48 pm

me ayudarías mas si pones algo de código. ya entendí lo que querías decir pero como seria si el personaje salta ,para saltar tienen que vencer la gravedad.entonces como seria eso en código, si puedes podrías ponerme algo de seudocodigo , o también algo de c++ con sdl he visto que has puesto ejemplos por hay utilizando eso. :roll: . y como seria eso de la gravedad, la verdad es que no se mucho de fisica :oops: :cry:
spartan1217
 
Mensajes: 4
Registrado: Sab Feb 23, 2013 3:48 am

Re: deteccion de colosiones con plataformas

Notapor Barajas » Dom Feb 24, 2013 8:30 pm

spartan1217 escribió: y como seria eso de la gravedad, la verdad es que no se mucho de fisica :oops: :cry:


No importa, se puede aprender. :)

Imagen

he escrito un código en SDL muy simple ( :roll: o al menos lo más simple que puedo hacerlo). Esta es la parte importante:

//revisamos si el fondo del personaje, esta chocando con alguna
//de las plataformas que existen....
//en español seria algo como:
/**
si no toca con sus pies la plataforma 1 o la plataforma 2 y no esta saltando
entonces, esta cayendo.
**/
if( not ( colision( Plataforma1, GetFondo(Personaje)) or colision( Plataforma2, GetFondo(Personaje)) )
and (not Saltando)
){
Cayendo=true;
};

//y lo que sigue en español seria:
/**
si toca con sus pies la plataforma 1 o la plataforma 2 no esta cayendo.
**/
if( colision( Plataforma1, GetFondo(Personaje)) or colision( Plataforma2, GetFondo(Personaje)) ){
Cayendo= false;
//si se presiona la tecla arriba, entonces, esta saltando...
if(keys[SDLK_w] || keys[SDLK_UP]){
Saltando = true;
/**esta es la fuerza inicial del salto...*/
fuerza_salto = 12;
}
};

//si esta cayendo, lo jalamos hacia abajo
//(recuerda que en las computadoras el eje y crece hacia abajo. )
if(Cayendo){
Personaje.y+=1;
}

if(Saltando){
//cuando saltas, generas una fuerza contraria a la de la gravedad
//eso es lo que te mueve hacia arriba...
Personaje.y-=fuerza_salto;
//pero la gravedad te frena poco a poco...
fuerza_salto-=1;
}

//en el momento en que la fuerza del salto llega a 0
//lo único que actúa sobre ti es la gravedad,
//empiezas a caer...
if(fuerza_salto<0){
Saltando = false;
}


Aquí el código fuente si quieres compilarlo y verlo en acción: (Los obligados son SDL y SDL_Imagen, los demás como SDL_TTF y SDL_Mixer si no los tienes, solo comenta las lineas de utilidades que los incluyen...)

http://db.tt/L1RdZWPp

Espero que te sea útil. :)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: deteccion de colosiones con plataformas

Notapor spartan1217 » Lun Feb 25, 2013 5:30 pm

:D jaja si pude compilarlo y todo aunque me dio algunos problemas pero ya los solucione , pero no entiendo muy bn que es lo que hace la función "getfondo" creo que tienen que ver con la colisión de plataformas. ah y también quisiera saber si este mismo método se puede utilizar para las colisiones con tiles la verdad es que no se analizar mucho que digamos jeje :roll:
spartan1217
 
Mensajes: 4
Registrado: Sab Feb 23, 2013 3:48 am

Re: deteccion de colosiones con plataformas

Notapor Barajas » Mar Feb 26, 2013 4:35 am

Si, le puse getfondo, porque regresa el fondo del cubo para la colisión (seria como los pies del personaje), y por que no se me ocurrió otro nombre XD.

Existe otra técnica para tiles, pero en si, es la misma idea, solo cambia la manera en que se determina la colisión: http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: deteccion de colosiones con plataformas

Notapor spartan1217 » Mié Feb 27, 2013 1:29 am

jajaja si, ya me parecia raro el nombre de esa funcion jeeje ahora si entiendo mejor la cuestion. gracias tio por tu ayuda me has ayudado un monton :lol: :D :wink:
spartan1217
 
Mensajes: 4
Registrado: Sab Feb 23, 2013 3:48 am


Volver a Videojuegos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado