Movimiento en S

Started by Arcontus, October 08, 2011, 05:00:14 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Arcontus

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.
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

izubiaurre

Has probado hacer con las funciones sin(x) o cos(x). Son oscilantes y ya tienes en el lenguaje.

Arcontus

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.
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

hardyx

#3
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.



Aqui tienes un ejemplo de SIN(X)
http://wiki.bennugd.org/index.php?title=Sin

Futu-block

#4
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

Arcontus

#5
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++
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

Futu-block

claro, porque lo que haces es sacar el seno del circulo segun el punto donde se encuentre