Tengo dudas sobre el motor de físicas de Game Maker, y es que no sé crear un personaje para un juego plataformas. Estuve haciendo algunas pruebas, pero no logro hacer un sistema de colision que quede bien para el personaje. Además de que el movimiento básico me cuesta configurar. Dejo adjunto el archivo donde hice las pruebas.
Este es el código de mi personaje:
CREATE
[gml]spd = 350;
jumpspd = 130;
phy_fixed_rotation = true;[/gml]
STEP
[gml]movement_normal(obj_suelo);
movement_normal(obj_cuadrado);
movement_normal(obj_circulo);
movement_normal(obj_triangulo);[/gml]
SCRIPT
[gml]//Direnccion en la que se mueve
var dir = keyboard_check(ord("D"))-keyboard_check(ord("A"));
//Detectar colision
if (position_meeting(x-14,y+33,argument0) || position_meeting(x+14,y+33,argument0)){
//Horizontal (tocando suelo)
physics_apply_force(x,y,dir*spd,0);
//Vertical (tocando suelo)
if (keyboard_check(vk_space)){
physics_apply_impulse(x,y,0,-jumpspd);
}
}
else{
//Horizontal (al no tocar suelo)
physics_apply_force(x,y,dir*spd/10,0);
}[/gml]
Y estas las propiedades de la room:
Relación píxeles/metros: 0.05
Gravedad x: 0
Gravedad y: 30
Ignoren el hecho de que el script se repite en el evento step. Simplemente lo hice así para probar las colisiones con otros objetos dinámicos. Pero al estar un script detectando una posición y otro otra posición, la fuerza se acumula y se mueve más rápido y salta más alto.
Este es el código de mi personaje:
CREATE
[gml]spd = 350;
jumpspd = 130;
phy_fixed_rotation = true;[/gml]
STEP
[gml]movement_normal(obj_suelo);
movement_normal(obj_cuadrado);
movement_normal(obj_circulo);
movement_normal(obj_triangulo);[/gml]
SCRIPT
[gml]//Direnccion en la que se mueve
var dir = keyboard_check(ord("D"))-keyboard_check(ord("A"));
//Detectar colision
if (position_meeting(x-14,y+33,argument0) || position_meeting(x+14,y+33,argument0)){
//Horizontal (tocando suelo)
physics_apply_force(x,y,dir*spd,0);
//Vertical (tocando suelo)
if (keyboard_check(vk_space)){
physics_apply_impulse(x,y,0,-jumpspd);
}
}
else{
//Horizontal (al no tocar suelo)
physics_apply_force(x,y,dir*spd/10,0);
}[/gml]
Y estas las propiedades de la room:
Relación píxeles/metros: 0.05
Gravedad x: 0
Gravedad y: 30
Ignoren el hecho de que el script se repite en el evento step. Simplemente lo hice así para probar las colisiones con otros objetos dinámicos. Pero al estar un script detectando una posición y otro otra posición, la fuerza se acumula y se mueve más rápido y salta más alto.