Estoy haciendo un juego con vista de arriba, por ahora tengo un sencillo codigo de movimiento (x+=4). El "problema" es cuando apreto 2 teclas arriba y derecha por ejemplo, y la velocidad es mayor que cuando apreto una sola. Hay alguna solucion para esto ???
Hola. Pues así rápidamente se me ocurre que en lugar de usar el clásico x = x + velocidad; y = y + velocidad, intenta con las variables speed y direction algo como:
if keyboard_check(vk_left)
speed = velocidad
direction = 180
... etc
Es lo mismo, se cambia una variable por la otro pero gracias, seguire intentando arreglarlo.
piensa en un triangulo rectángulo con dos lados iguales (catetos), el tercero siempre será mas grande (hipotenusa), si los lados iguales miden 1, el otro medirá raíz cuadrada de 2 (sqrt(2)).
para poder mover tu objeto con relativa precisión deberás tomar los componentes X y Y de la velocidad diagonal que quieres asi:
[gml]
x += velocidad*cos(degtorad(dirección )) //dirección = múltiplos de 45
y += velocidad*sin(degtorad(dirección ))
[/gml]
o mejor:
[gml]
x += lengthdir_x(velocidad, dirección)//dirección = múltiplos de 45
y += lengthdir_y(velocidad, dirección)
[/gml]
Puedes hacer esto:
if keyboard_check(vk_up) and (keyboard_check(vk_right)=false or keyboard_check(vk_left)=false) {y-=4}
Despues en el movimiento diagonal...
if keyboard_check(vk_up) and (keyboard_check(vk_right) {x+=4 y-=4}
if keyboard_check(vk_up) and (keyboard_check(vk_left) {x-=4 y-=4}
...y asi para el resto de direcciones
Gracias por las respuestas ya pude solucionarlo.