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.
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.
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.
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]