Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Arcontus on October 08, 2011, 05:00:14 PM

Title: Movimiento en S
Post by: Arcontus on October 08, 2011, 05:00:14 PM
Hola chicos,

necesito ayuda en mi código para generar una "onda" sobre una recta. He conseguido algo parecido con el siguiente código, pero no entiendo porqué se va para arriba (o para abajo según la variable sentido) en vez de ir oscilando recto, que es lo que necesito.


PROCESS habilidad_misiles(habilidades *habilidad, int Px, int Py, int angulo, int sentido, int giro, int amplitud)
PRIVATE
    int contador,
    giroMisil,
    sentidoMisil;
END
BEGIN
    file =disparosFPG;
    region = REGION_JUEGO;
    ctype=c_scroll;
    x = Px;
    y = Py;
    graph = 7;
    angle = angulo;
    sentidoMisil = sentido;
    giroMisil = giro;
    size = 20;
    while (contador < 100)
        if((giroMisil > amplitud) || (giroMisil < -amplitud)) sentidoMisil = sentidoMisil * -1; END
        giroMisil = (giroMisil + sentidoMisil);
        angle = angle + (giroMisil * 1000);
        advance(150);
        contador++;
        FRAME;
    END
END


Alguna idea para que el misil vaya oscilando sobre una linea recta?

Gracias.
Title: Re: Movimiento en S
Post by: izubiaurre on October 08, 2011, 07:30:42 PM
Has probado hacer con las funciones sin(x) o cos(x). Son oscilantes y ya tienes en el lenguaje.
Title: Re: Movimiento en S
Post by: Arcontus on October 08, 2011, 07:39:30 PM
Quote from: izubiaurre on October 08, 2011, 07:30:42 PM
Has probado hacer con las funciones sin(x) o cos(x). Son oscilantes y ya tienes en el lenguaje.

Pues no se como se utilizan, si me puedes ayudar con el código lo agradecería. Por otro lado, el misil tiene que apuntar siempre en la dirección hacia la que va.
Title: Re: Movimiento en S
Post by: hardyx on October 10, 2011, 08:24:05 AM
La función SIN(X) en Bennu toma un ángulo en milésimas de grado y te da el seno. Los grados están multiplicados por 1000. El resultado es lo que tienes que sumar a las coordenadas x,y de la recta para que ondule. Ah, el seno te da un valor de -1 a 1. Tienes que multiplicarlo por la longitud en pixels que quieres que se desplace la onda.

(http://www.vadenumeros.es/imagenes/primero/funcion-seno.gif)

Aqui tienes un ejemplo de SIN(X)
http://wiki.bennugd.org/index.php?title=Sin (http://wiki.bennugd.org/index.php?title=Sin)
Title: Re: Movimiento en S
Post by: Futu-block on October 10, 2011, 09:04:07 AM
cierto, un ejemplo en codigo puede ser este:



   seno=sin(angulo)*5;
   x = x + seno;
   angulo=angulo+10000;



donde sin(angulo) es lo que ha explicado hardyx, que sirve para que ''ondule''
x = x+ seno = al avance y angulo = angulo + 10000 es la frecuencia de ondulacion


dicho de una manera mas tosca, je je
Title: Re: Movimiento en S
Post by: Arcontus on October 14, 2011, 03:13:16 PM
Fantástico!! cuando lo implemente os comento el resultado, pero tiene muy buena pinta. ¿Esto sirve aun que el eje de la recta no sea X?

Gracias a los 2, Karma++
Title: Re: Movimiento en S
Post by: Futu-block on October 14, 2011, 07:50:49 PM
claro, porque lo que haces es sacar el seno del circulo segun el punto donde se encuentre