Bennu Game Development

Foros en Español => Recursos => Topic started by: scuws on June 26, 2010, 09:23:01 PM

Title: Mover un coche viendolo desde arriba
Post by: scuws on June 26, 2010, 09:23:01 PM
Probablemente sea una tonteria pero a mí que estoy empezando me ha costado un dolor de cabeza y puede que alguien que este empezando le sirva, también lo pongo por si es mejorable( lo más probable ).


PROCESS coche ( )
PRIVATE

float speed;

END
BEGIN
file = fpgs [ 0 ];
graph = 1;
x = 200;
y = 200;
LOOP
IF ( speed < 0 || speed > 0 )
IF ( KEY ( _RIGHT ) )
angle += -speed*500;
ELSEIF ( KEY ( _LEFT ) )
angle += speed*500;
END
END
IF ( KEY ( _UP ) )
IF ( speed < 10 )
speed += 0.5;
END
ELSE
IF ( speed > 0 )
speed -= 0.25;
END
END
advance_c ( speed );
FRAME;
END
END

FUNCTION advance_c ( float speed )

BEGIN
father.x += ( speed*sin(father.angle) );
father.y += ( speed*cos(father.angle) );
END


Aquí os pongo la imagen que he usado.
Title: Re: Mover un coche viendolo desde arriba
Post by: SplinterGU on June 26, 2010, 10:50:42 PM
para hacer eso existe la funcion advance

advance( incremento ), tiene en cuenta angulo, x e y (resolution tambien si corresponde).

el codigo quedaria:


PROCESS coche ( )
PRIVATE

float speed;

END
BEGIN
file = fpgs [ 0 ];
graph = 1;

        resolution = 100;
x = 200 * resolution;
y = 200 * resolution;

LOOP
IF ( speed < 0 || speed > 0 )
IF ( KEY ( _RIGHT ) )
angle += -speed*500;
ELSEIF ( KEY ( _LEFT ) )
angle += speed*500;
END
END
IF ( KEY ( _UP ) )
IF ( speed < 10 )
speed += 0.5*resolution;
END
ELSE
IF ( speed > 0 )
speed -= 0.25*resolution;
END
END
advance( speed );
FRAME;
END
END


podes cambiar los "*resolution" por el valor ya multiplicado.

saludos.
Title: Re: Mover un coche viendolo desde arriba
Post by: laghengar on June 27, 2010, 12:58:45 AM
Inventé un sistema por el que bennu giraba el mapa por el que circula, junto con los objetos que estén en este mapa, lo hice hace mucho tiempo pero si te interesa iré recopilando información.
Title: Re: Mover un coche viendolo desde arriba
Post by: Prg on June 29, 2010, 05:06:45 PM
el método de splinter es el mejor, pero incluso (cuando el speed>1), puedes usar get_distx y get_disy

sería así:

[code language="bennu"]PROCESS coche ( )
PRIVATE

   float speed;
   
END
BEGIN
   file = fpgs [ 0 ];
   graph = 1;

   LOOP
      IF ( speed < 0 || speed > 0 )
         IF ( KEY ( _RIGHT ) )
            angle += -speed*500;
         ELSEIF ( KEY ( _LEFT ) )
            angle += speed*500;
         END
      END
      IF ( KEY ( _UP ) )
         IF ( speed < 10 )
            speed += 0.5*resolution;
         END
      ELSE
         IF ( speed > 0 )
            speed -= 0.25*resolution;
         END
      END
      x+=get_distx(angle, speed);
                y+=get_disty(angle, speed);
      FRAME;
   END
END[/code]