Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Yoo en Diciembre 29, 2014, 08:50:09 PM

Título: [SOLUCIONADO]AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: Yoo en Diciembre 29, 2014, 08:50:09 PM
 :(  hola nadie me ayuda en esto,, así que tuve que repostearlo, pero más especificado:  :D

█   █B █   █
     A                        A= bomberman iniciando el recorrido
█   █   █   █               B= bomberman terminando

Yo keiro que cuando tu estes en el punto "A" y SOLO presiones la tecla arriba, se vaya hasta el punto "B" con los sprites correctos. Pero obviamente primero bomberman tiene que ver si el recorrido por donde va está vacío.ESO ES TODO, NADA MAS ,AYUDAAAAA!!!!!
  :'( (los que jugaron bomberman ya saben sobre esto,¿cómo lo podría hacer?)  :'(     
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: fega en Diciembre 29, 2014, 09:36:08 PM
revisa algun ejemplo de pacman, te aseguro que ahi encontraras la respuesta ;)
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: omick en Diciembre 30, 2014, 08:16:26 AM
Hola..   yo te ayudo jeje ..
  bueno considerando el movimiento de bomberman, este se mueve por cuadricula por lo tanto hay que mover el personaje asi...
  supongamos que usas sprites  de 32x32 y  GML
  En create del personaje pon:
      mover=0;
      vel=4  // para la velocidad de movimiento
en  el evento de key pressed up:
    if mover=0{
       if !place_meeting(x,y-32,objPared){
           speed=vel;direction=90;mover=1;
            alarm[0]=32/vel}
    }

En el evento alarm 0:
  speed=0; mover=0; move_snap(32,32)
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: Yoo en Diciembre 30, 2014, 05:19:35 PM
Cita de: fega en Diciembre 29, 2014, 09:36:08 PM
revisa algun ejemplo de pacman, te aseguro que ahi encontraras la respuesta ;)
Ya vi pacman pero no se trata de eso sino de boomberman!!! pacman es muy diferente -_-
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: fab62 en Diciembre 30, 2014, 11:10:18 PM
Hace poco hice un algoritmo de movimiento preciso, lo adapte y salio esto:

    /****************************************************
        precise_movement(xspeed,yspeed,obstacle)
    -------------------------------------------------------------------
        movimiento preciso con movimientos horizontal y vertical separados
    *****************************************************/
   
    // obstaculo del movimiento
    var obstacle = argument2;
   
    // obtenemos direcciones: vertical y horizontal
    var dirh = sign(argument0);
    var dirv = sign(argument1);
   
    var xspeed = argument0;
    var yspeed = argument1;
   
    // para la velocidad de precision
    var pspeed = 0;
   
    // para mover en otra direccion cuando toca la muralla
    // vemos por donde esta mas libre
    if (dirh != 0) && (dirv == 0)
    {
        var lu = 0, ld = 0;
        while (place_meeting(x+dirh,y-lu,obstacle) && (lu < sprite_height+1)) lu++;
        while (place_meeting(x+dirh,y+ld,obstacle) && (ld < sprite_height+1)) ld++;
       
        if ((lu <= sprite_height) or (ld <= sprite_height))
        and ((lu > 0) or (ld > 0))
        {
            if (lu < ld) dirv = -1;
            else dirv = 1;
            yspeed = abs(xspeed)*dirv;
        }
    }
    if (dirv != 0) && (dirh == 0)
    {
        var ll = 0, lr = 0;
        while (place_meeting(x-ll,y+dirv,obstacle) && (ll < sprite_width+1)) ll++;
        while (place_meeting(x+lr,y+dirv,obstacle) && (lr < sprite_width+1)) lr++;
       
        if ((ll <= sprite_width) or (lr <= sprite_width))
        and ((ll > 0) or (lr > 0))
        {
            if (ll < lr) dirh = -1;
            else dirh = 1;
            xspeed = abs(yspeed)*dirh;
        }
    }
   
    // loop horizontal
    while (pspeed*dirh < xspeed*dirh)
    {
        // si se encuentra un obstaculo en la velocidad_precision actual, se sale del while
        if place_meeting(x+pspeed+dirh,y,obstacle) break;
        else
        {
            // si se encuentra en una esquina, se puede doblar
            if !place_meeting(x+pspeed+dirh,y+dirv,obstacle)
            && place_meeting(x,y+dirv,obstacle)
                y += dirv;
   
            // en este caso, velocidad_precision cambia
            pspeed += dirh;
        }
    }
   
    // movemos en x
    x += pspeed;
   
    // reseteamos la velocidad de precision obtenida
    pspeed = 0;
   
    // velocidad de precision en y
    while (pspeed*dirv < yspeed*dirv)
    {
        // si se encuentra un obstaculo en la velocidad_precision actual, se sale del while
        if place_meeting(x,y+pspeed+dirv,obstacle) break;
        else
        {
            // si se encuentra en una esquina, se puede doblar
            if !place_meeting(x+dirh,y+pspeed+dirv,obstacle)
            && place_meeting(x+dirh,y,obstacle)
                x += dirh;
   
            // en este caso, velocidad_precision cambia
            pspeed += dirv;
        }
    }
   
    // movemos en y
    y += pspeed;


y la parte de control es asi (en el evento step):

   
    obstaculo = obj_solido;
   
    //---------------------------------------------------------------------------------------------------------------------------
    // ACTUALIZAR CONTROLES DE DIRECCION
    //---------------------------------------------------------------------------------------------------------------------------
   
    key_left  = keyboard_check(vk_left)
    key_right = keyboard_check(vk_right)
    key_up    = keyboard_check(vk_up)
    key_down  = keyboard_check(vk_down)
   
    //---------------------------------------------------------------------------------------------------------------------------
    // ENCONTRAR LAS DIRECCIONES
    //---------------------------------------------------------------------------------------------------------------------------
   
    // direccion horizontal
    vel_h = velocidad*(key_right - key_left)
   
    // direccion vertical
    vel_v = velocidad*(key_down - key_up)
   
    // movemos
    precise_movement(vel_h,vel_v,obstaculo);


velocidad debes crearla en el evento create... a mi me ha funcionado :)
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: fab62 en Diciembre 30, 2014, 11:12:44 PM
 :o!!! verdad que usas gm8 xD!!! el codigo sirve en GMS, solo cambia los var variable = valor; por var variable; variable = valor xD
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: Yoo en Enero 02, 2015, 05:28:42 PM
Cita de: fab62 en Diciembre 30, 2014, 11:12:44 PM
:o!!! verdad que usas gm8 xD!!! el codigo sirve en GMS, solo cambia los var variable = valor; por var variable; variable = valor xD
ESO VA EN SCRIPT CIERTO?
o no? y los argumentos? (si tienes tiempo me das un axample porfa)
ME DA ERROR EN
while (place_meeting(x+dirh,y-lu,obstacle) && (lu < sprite_height+1)) lu++;
        while (place_meeting(x+dirh,y+ld,obstacle) && (ld < sprite_height+1)) ld++;
                                                                                                            l  l
                                                                                                            l  l
                                                                                                     da error en estos mas! GM8 no lo reconoce(es lo mismo que: " ld += 1 " ???)
RESPONDE PORFA
                                           
Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: Yoo en Enero 02, 2015, 05:50:13 PM
 ;D YA ME SALIO!!!   8) GRACIAS!!  ;D ES LO QUE KERIA !!! solo lo editare algunas cosas y listo!! (aunq no entiendo casi nada, pero haber si alguien me lo explica o tendré q auto explicarme!)  ???


Título: Re:AYUDA CON MOVIMIENTO TIPO BOMBERMAN
Publicado por: Yoo en Enero 09, 2015, 04:48:20 PM
Pero, yo keria que haya mas de un obtaculo! como por ejemplo la bomba que dejas cuando estas fuera de ella, es un obtaculo, pero como lo "agrego al script", se puede?  como lo hago?  XD ayudaa