Veréis, empecé ayer con Game Maker y directamente he empezado a código. No soy novato en programación en general aunque si en GML xD y he estado buscando por ahí y no he conseguido ver un problema igual a este.
La cosa es que poniendole el suelo que le ponga se me queda pegado el personaje. Lo mejor de todo es cuando le da el momento spiderman y se sube por las paredes y el techo xD
También si os fijais a veces hay más distancia entre el personaje y el suelo, supongo que va asociado con los frames pero tampoco veo una causa directa..
El código es este:
En un evento create del personaje:
{
gravity_direction = 270;
jump = 1;
}
Evento step:
{
sc_movement();
}
script (sc_movement):
{
if keyboard_check(ord("A")) && place_free(x-3,y) then hspeed=-4;
if keyboard_check(ord("D")) && place_free(x+3,y) then hspeed=4;
if keyboard_check(ord("D")) then sprite_index = boy_der;
if keyboard_check(ord("A")) then sprite_index = boy_izq;
if keyboard_check(ord("S")) then sprite_index = boy_abajo;
if keyboard_check(ord("A")) || keyboard_check(ord("D"))
{
image_speed = 1;
}
else
{
image_speed = 0;
hspeed = 0;
}
if keyboard_check_pressed(ord("W"))
{
if jump>0
{
vspeed=-10;
jump-=1;
}
}
if place_free(x,y+3)
{
gravity=0.7;
}
else
{
gravity=0.7;
}
}
Evento de colisión con el suelo o las paredes:
{
jump=1;
gravity_direction=270;
}
He probado a cambiar cosas por mi cuenta, según la lógica que he seguido siempre en otros lenguajes, pero no he logrado resolverlo de momento. Saludos!
EDITO:Unos segundos después de poner esto he resuelto lo de que escale por las paredes xD ya no lo hace, pero me sigue pasando lo del suelo.
Saludos makero Scimjara:
No veo en la respuesta a la colisión cuando propones la gravedad a cero (0). La gravedad debería ser cero una vez toque el suelo. Tienes un trozo de código en el evento "steps" así:
Citarif place_free(x,y+3)
{
gravity=0.7;
}
else
{
gravity=0.7;
}
Creo que en las dos posibles respuestas deben ser diferentes ¿no? :-[ Claro no se si este sea el problema. :-\
Otra cosa a tener en cuenta es que cuando chequeas si ha ocurrido colisión ya han pasado algunos píxeles. Es muy frecuente que cuando se detecta la colisión ya el personaje esté ligeramente dentro del suelo y eso provoque la inmovilidad del mismo. Una forma de resolverlo es retrocediendo algunos píxeles antes del suelo, causa posible de por que ves al personaje separado del suelo.
Espero sirva de algo, saludos. ;D
Tienes razón, la respuesta tenía que ser diferente pero es que cambié tantas cosas para intentar solucionar el problema que cambié ese número y después se me pasó por completo jeje.
Bueno, lo puse a 0 pero el problema persiste. Ahora se queda a menos distancia del suelo porque he colocado la vspeed del salto con un menor número, por lo que al ser menor el movimiento que hace por step, al parecer la colisión es más exacta, pero sigue quedandose trabado..
Edito el mensaje sobre la marcha, se me iluminó la cabeza xD
Para cualquiera que pueda tener este error, me quedó la siguiente linea por editar, en la colisión, no cambia la vspeed! por lo tanto cuando colisiona la vspeed sigue estando a -10, con lo cual sigue colisionando sin cesar contra el suelo a esa velocidad. La cosa es que cuando colisione debe quedar a 0 y cuando salte debe estar a -10 para que caiga.
Con lo cual ya lo solucioné :)!
Saludos y gracias por la respuesta ferhand!
no marques en los sprites la casilla "Presise Collision" y claro lo mejor es que uses una mask.
y en el event de collision contra el object del piso coloca esto
move_contac_solid(direction,vspeed) vspeed=0;