Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: norahc en Septiembre 19, 2021, 04:57:22 am

Título: Problemas con el movimiento con un juego sencillo
Publicado por: norahc en Septiembre 19, 2021, 04:57:22 am
Bueno, como está escrito en el título, tengo un pequeño problema el cual me gustaría que me ayudasen. Cada vez que ejecuto el juego el personaje solo se va a un lado con la tecla que presiono y al llegar a una pared simplemente ya no puede moverse, presiono todas las teclas y no pasa nada. Me gustaría que me ayudaran, quizás alguno de ustedes ya haya tenido el mismo problema, les paso el código para que vean si hay un error o algo:

if keyboard_check(vk_right) && place_free(x+1,y)
{
direction = 0;
speed = v;
}

if keyboard_check(vk_up) && place_free(x,y-1)
{
direction = 90;
speed = v;
}   

if keyboard_check(vk_left) && place_free(x-1,y)
{
direction = 180;
speed = v;
}

if keyboard_check(vk_down) && place_free(x,y+1)
{
direction = 270;
speed = v;
}

//Rapidez de los frames

if speed > 0
{
image_speed = 1;   
}
else {
   image_speed = 0;
   image_index = 0;
}

switch(direction)
{
   case 0:
   sprite_index = player_right;
   break;
   
case 90:
   sprite_index = player_up;
   break;
   
   case 270:
   sprite_index = player_down;
   break;
   
   case 180:
   sprite_index = player_left;
   break;
}





Título: Re: Problemas con el movimiento con un juego sencillo
Publicado por: dixon en Septiembre 19, 2021, 08:27:24 am
Hola, gusto en salidarlo...

Cambia el numero uno "1" por la letra v. En tu script estas usando la letra v para definir velocidad y posiblemente la velocidad de movimiento sea mayor que uno, por lo tanto la distancia de colision no debería se uno sinó que debería ser mayor que la velocidad o igual.

Te quedaría algo como esto:

Código: [Seleccionar]
if keyboard_check(vk_right) && place_free(x+v,y)
{
direction = 0;
speed = v;
}

if keyboard_check(vk_up) && place_free(x,y-v)
{
direction = 90;
speed = v;
}   

if keyboard_check(vk_left) && place_free(x-v,y)
{
direction = 180;
speed = v;
}

if keyboard_check(vk_down) && place_free(x,y+v)
{
direction = 270;
speed = v;
}


Para moverte diagonalmente puedes sumarle o restarle 45 grados a las direcciones, dependiendo de la tecla que se presione, ejemplo:

Código: [Seleccionar]
if keyboard_check(vk_right) && place_free(x+v,y)
{
direction = 0;
if (keyboard_check(vk_up)) {diection=direction+45}
speed = v;
}
Título: Re: Problemas con el movimiento con un juego sencillo
Publicado por: Jeffrey Faper en Octubre 08, 2021, 09:29:55 pm
yo le recomendaría que usara  place_meeting en lugar de place_free 
si quiere usar place_meeting el movimiento de su personaje y colisión contra objetos se vería algo parecido a esto:
EJEMPLO
//objeto jugador EVENTO CREATE:
movspd    = 180/room_speed;
vsp  = 0;
hsp = 0;

//objeto jugador EVENTO STEP:

 var movUp,movLeft,movDown,movRight,Hor,Ver,halveMov;
     movUp    = keyboard_check(vk_up);
     movLeft  = keyboard_check(vk_left);
     movDown  = keyboard_check(vk_down);
     movRight = keyboard_check(vk_right);
   
       
     //INICIAR MOVIMIENTO VERTICAL
     if(movUp && !movDown){Ver =-1;}
else if(movDown && !movUp){Ver = 1;}
   else{Ver = 0;}        
       
     //INICIAR MOVIMIENTO HORIZONTAL
     if(movLeft && !movRight){Hor =-1;}
else if(movRight && !movLeft){Hor = 1;}
   else{Hor = 0;}
       
     //LIMITAR VELOCIDAD DIAGONAL  A LA MITAD SI QUIERE
     if(Hor!=0 && Ver!=0){halveMov = 1.3;}
   else{halveMov = 1;}
   
        hsp = Hor*movspd/halveMov;
        vsp = Ver*movspd/halveMov;
       
       
     //COLISION HORIZONTAL
     if(!place_meeting(x+sign(hsp),y,objWall)){x += hsp;}
   else{hsp = 0;}
       
     //COLISION VERTICAL
     if(!place_meeting(x,y+sign(vsp),objWall)){y += vsp;}
   else{vsp = 0;}
   
si le interesa un tutorial sobre movimiento de 8 direcciones puede descargar mi ejemplo aunque es para la version 1.4  de Game Maker Studio
https://drive.google.com/file/d/1o7yEXlqmwn5-wLUs-LIMTgELfMtuSeoI/view
Título: Re: Problemas con el movimiento con un juego sencillo
Publicado por: roy_focker en Noviembre 17, 2021, 11:11:16 pm
es una boludez lo que voy a decir pero le pusiste mascara al personaje?

Warning: Parameter 1 to spoiler_buffer() expected to be a reference, value given in Unknown on line 0

Warning: Parameter 1 to custom_report_ob() expected to be a reference, value given in Unknown on line 0