Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: harloneti en Noviembre 18, 2012, 05:49:56 PM

Título: Problema con plataforma
Publicado por: harloneti en Noviembre 18, 2012, 05:49:56 PM
Haber si me explico.
Tengo una pelota que tiene por defecto una hspeed=10. Se mueve por la plataforma y salta (hatsa hay todo bien). El problema viene cunaod la pelota cae de la plataforma y choca con unlateral de otra y se queda la pelota congelada...
Como en la foto:
(http://img40.imageshack.us/img40/7659/problemaxh.png) (http://imageshack.us/photo/my-images/40/problemaxh.png/)

El codigo de gravedad lo tenog e el step de la bola y es:
//Ponemos gravedad y limite de velocidad en gravedad
if place_free(0,+1)
    {
    gravity=0.5
    gravity_direction=270
    }
else
    {
    gravity=0
    gravity_direction=270
    }
if vspeed > 10
    {vspeed=10}


y en el eento collision con el suelo es este:
move_contact_solid(direction,12);
vspeed=0;


Estoy convencido que el problema esta en el codigo de collision peor no se como solucionarlo...

Título: Re:Problema con plataforma
Publicado por: Karasuman en Noviembre 18, 2012, 06:56:20 PM
Haz un sprite del mismo tamaño que tu bola pero cuadrado, luego se la asignas como mascara de colision, abajo de parent en el objeto de la bola dice "Mask:" y ahi seleccionas el sprite que creaste cuadrado. Eso deveria funcionar.
Título: Re:Problema con plataforma
Publicado por: harloneti en Noviembre 18, 2012, 07:18:36 PM
No funciona. De todas formas en propiedades del sprite ya le modifique la mascara de forma manual y la hice rectangular, vamos que su mascara no es redonda..
Título: Re:Problema con plataforma
Publicado por: Johann en Noviembre 18, 2012, 11:33:35 PM
No puedes hacer una referencia absoluta para la función place_free. asi como lo tienes siempre verifica la colisión en el pixel [0,1] de la ventana donde supongo no hay nada.
debes decir:
[gml]
if place_free(x,y+16) {
    //esta posición es relativa al objeto que usa la funcion
[/gml]
el valor adicional en y depende del tamaño del sprite y la posición del offset en el mismo.
verifica que el offset del sprite sea el centro y que el tamaño sea de 32x32 pixeles, para que puedas poner +16.

PD: tambien haz lo de la mask
Título: Re:Problema con plataforma
Publicado por: harloneti en Noviembre 19, 2012, 01:25:43 AM
//Ponemos gravedad y limite de velocidad en gravedad
if place_free(x,y+16)
    {
    gravity=0.5
    gravity_direction=270
    }
else
    {
    gravity=0
    gravity_direction=270
    }
if vspeed > 10
    {vspeed=10}

el codigo como tu me dices quedaria asi no?. Pues no funciona tampoco... ni con mask ni sin ella...
Título: Re:Problema con plataforma
Publicado por: Karasuman en Noviembre 19, 2012, 01:36:31 AM
yo en el evento de colision utilizo esto:

hspeed=0;

//AL colisionar abajo con el piso
if(vspeed>0){
    move_contact_solid(270,vspeed);
    vspeed=0;
}

//al colisionar arriba con el techo
if (vspeed<0 and !place_free(x,y-12)){
     move_contact_solid(90,vspeed);
     vspeed=0;
}
//ese !place_free(x,y-12) lo puse por que sin el provoca un bug, en donde sale 12 es la velocidad del salto
//o sea, tu vspeed, hay le colocas la vspeed que usa tu bola para saltar


Si no te funciona seria bueno que dejaras el editable, asi te podriamos ayudar mejor.
Título: Re:Problema con plataforma
Publicado por: harloneti en Noviembre 19, 2012, 01:45:12 AM
Nada...
Dejo el codigo fuente... que raro todo... XD
http://ubuntuone.com/3dNmZY02kKniv7NPkYkUui (http://ubuntuone.com/3dNmZY02kKniv7NPkYkUui)
Título: Re:Problema con plataforma
Publicado por: Karasuman en Noviembre 19, 2012, 02:03:38 AM
LISTO  8). Pruebalo y me dices.
Título: Re:Problema con plataforma
Publicado por: harloneti en Noviembre 19, 2012, 10:46:56 AM
Gracias me funciono a medias.
Quite lo del else hspeed=10.
y el codigo lo modifique asi:
//SI HAY UNA PARED 10 PIXELES A LA DERECHA, ME DETENGO
if place_meeting(x+10,y+0,suelo_obj)or place_meeting(x-10,y+0,suelo_obj){
    hspeed=0;
}

Para que solo pase con la pared.
Muchas gracias me sirvio