Mi código es el sigente
create
Vv=0
Vh=0
velocidad=4

Steep
Vv=((keyboard_check(vk_down)-keyboard_check(vk_up))*Velocidad);
Vh=((keyboard_check(vk_right)-keyboard_check(vk_left))*Velocidad);

x+=Vh;
y+=Vv;


y el problema que tengo es el sigente cuando va en diagonal el protagonista va mas rápido que los bots que tambein tienen una velocidad de 4  y quiero que sea parejo como limito ello?

#1 Mayo 25, 2019, 08:10:00 PM Ultima modificación: Mayo 25, 2019, 08:13:47 PM por NiuWeb
Eso sucede porque cuando el movimiento es diagonal, las componentes de movimiento vertical y horizontal valen (ambas) 4, que al sumarse dan como resultado un número mayor (4√2).

Para corregir esto, deberías hacer lo siguiente:
[gml]
///EVENTO STEP

//Primero, consigues las componentes del movimiento como lo haces normalmente:
var hmove = keyboard_check(vk_right) - keyboard_check(vk_left);
var vmove = keyboard_check(vk_down)  - keyboard_check(vk_up);

//Segundo, calculas el ángulo que forman ambas componentes entre sí
var angle = point_direction(0, 0, hmove, vmove);

//Tercero, multiplicas el valor de la velocidad por las componentes del ángulo.
var hvel = abs(hmove) * vel * dcos(angle);
var vvel = abs(vmove) * vel * dsin(angle);
//(se multiplica también por "abs(hmove)" para evitar que haya movimiento cuando no se está presionando la tecla)

//Cuarto, mueves el objeto
x += hvel;
y -= vvel;
[/gml]
alaberga regué el café.

BA:STFW&RTFM

que buena explicación bro esta perfecta