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.

#3 Abril 11, 2013, 11:32:30 PM Ultima modificación: Abril 13, 2013, 04:39:52 AM por Maitreya
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]
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

#4 Abril 12, 2013, 08:20:29 AM Ultima modificación: Abril 12, 2013, 08:24:43 AM por Domenec
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.