Abril 14, 2015, 06:33:30 PM Ultima modificación: Abril 14, 2015, 11:03:37 PM por pacne
Buenas comunidad, estoy haciendo un juego con movimientos, el objeto se mueve cada vez que aprietas la tecla con keyboard_check_pressed, lo que quiero es que cada movimiento que haga me sume un movimiento, pero si el jugador esta colisionando y no se mueve no cuente.
Lo he creado con una variable  pero lo de la colision no se como hacerlo.
Muchas Gracias

#1 Abril 14, 2015, 06:44:29 PM Ultima modificación: Abril 14, 2015, 06:51:13 PM por penumbra
Lo ideal es declarar variables banderas, es decir, que te avisen cuando ocurra o no un evento, por ejemplo, una variable colision que sea true cuando haya colisión y false cuando no la haya (y esto depende de cómo manejes tus colisiones, hay muchas maneras, pero no indicas cual usas). Una variable moviendo que sea true cuando el personaje se mueva y false cuando no se mueva (y , otra vez, esto depende de cómo muevas a tu personaje, si es mediante hspees, vspeed y speed o ajustando los valores x e y)

cuando las banderas ya estén funcionando
[gml]
if keyboard_check_pressed(tecla_deseada) and (!colision) and (!moviendo)
{
     numero_movimientos += 1
}[/gml]

Este es mi codigo de movimiento:

if !keyboard_check(vk_up) and !keyboard_check(vk_down) and keyboard_check_pressed(vk_right)and place_free(x+1,y)    {x+=32;}
if !keyboard_check(vk_up) and !keyboard_check(vk_down) and keyboard_check_pressed(vk_left)and place_free(x-1,y)     {x-=32;}
if !keyboard_check(vk_right) and !keyboard_check(vk_left) and keyboard_check_pressed(vk_down)and place_free(x,y+1)  {y+=32;}
if !keyboard_check(vk_right) and !keyboard_check(vk_left) and keyboard_check_pressed(vk_up)and place_free(x,y-1)    {y-=32;}


Muchas Gracias

Pues ya tienes las condiciones para hacer que se mueva, que son las mismas condiciones para incrementar el contador. El código puede quedar así:
[gml]
... {x+=32; contador++;}
... {x-=32; contador++;}
... {y+=32; contador++;}
... {y-=32; contador++;}
[/gml]

este es mi codigo de movimiento y de colision

if !keyboard_check(vk_up) and !keyboard_check(vk_down) and keyboard_check_pressed(vk_right)and place_free(x+1,y)    {x+=32; global.move+=1;}
if !keyboard_check(vk_up) and !keyboard_check(vk_down) and keyboard_check_pressed(vk_left)and place_free(x-1,y)     {x-=32;global.move+=1;}
if !keyboard_check(vk_right) and !keyboard_check(vk_left) and keyboard_check_pressed(vk_down)and place_free(x,y+1)  {y+=32;global.move+=1;}
if !keyboard_check(vk_right) and !keyboard_check(vk_left) and keyboard_check_pressed(vk_up)and place_free(x,y-1)    {y-=32;global.move+=1;}

// Colision ob_bloque

if place_meeting(x,y,obj_bloque)
{
     x=xprevious;
     y=yprevious;
}


Gracias