Diciembre 29, 2014, 08:50:09 PM Ultima modificación: Enero 12, 2015, 06:48:17 PM por Yoo
 :(  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?)  :'(     
- Empty -

revisa algun ejemplo de pacman, te aseguro que ahi encontraras la respuesta ;)
entra a!:

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)

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 -_-
- Empty -

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 :)
El ayer es un recuerdo, el mañana un pensamiento, es el ahora en donde existo y vivo para ser feliz :D

 :o!!! verdad que usas gm8 xD!!! el codigo sirve en GMS, solo cambia los var variable = valor; por var variable; variable = valor xD
El ayer es un recuerdo, el mañana un pensamiento, es el ahora en donde existo y vivo para ser feliz :D

#6 Enero 02, 2015, 05:28:42 PM Ultima modificación: Enero 02, 2015, 05:30:52 PM por Yoo
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
                                           
- Empty -

#7 Enero 02, 2015, 05:50:13 PM Ultima modificación: Enero 03, 2015, 01:26:16 AM por Yoo
 ;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!)  ???


- Empty -

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
- Empty -