CHIPMUNK en bennu

Started by Prg, January 12, 2011, 04:27:44 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

#105
Quote from: Prg on February 02, 2011, 03:26:47 AM
con funciones que trabajan con body me refiero a:

[code language="bennu"]static int modUpdateVelocity2(INSTANCE * my, int * params)
{
    cpBodyUpdateVelocity(LOCDWORD(mod_chipmunk,my,LOC_BODY), cpv(*(float *)GLOADDR(mod_chipmunk,GLO_GRAVITY_X),*(float *)GLOADDR(mod_chipmunk,GLO_GRAVITY_Y)), *(float *)&params[0],*(float *)GLOADDR(mod_chipmunk,GLO_INTERVAL)/(float)GLODWORD(mod_chipmunk,GLO_PHRESOLUTION));
    return 0;
}[/code]

por ejemplo,

si LOCDWORD(mod_chipmunk,my,LOC_BODY)==0 puede crashear o no hacer nada (no se).

Quote
yo creo que la respuesta al problema es la primer pregunta que te hice en este post.
a cuál pregunta te refieres?

a la que me has respondido... tu solucion es evitar usar esas funciones, define variables globales para todo lo que afecte globalmente el entorno, y si puedes tener una funcion para forzar el update del entorno... otra opcion es que esta funcion internamente llame a la updatePhisic.

perdon, lo que te dije sirve para las del ambiente, pero para las que trabajan con el body, deberias tambien evitarlas y poner variables locales para eso, que se pueden resetear cuando termina el frame.

pero quizas la mas simple es que las funcioens que trabajan con body llamen al updatePhisic o directamente que creen el body si trabajan con 1 solo body.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

ok, pondré otro ejemplo:

[code language="bennu"]static int modaddRatchetJoint(INSTANCE * my, int * params)
{
    cpBody *   b1, *b2;
    cpConstraint * z;
    cpSpace * espacio = (cpSpace *)GLODWORD(mod_chipmunk, GLO_SPACE );
    INSTANCE * b;
    if (params[0]!=0)
    {
        b = instance_get( params[0] ) ;
        b1=LOCDWORD(mod_chipmunk,b,LOC_BODY);
    }
    else
    {
        b1 = &espacio->staticBody;
    }

    if (params[1]!=0)
    {
        b = instance_get( params[1] ) ;
        b2=LOCDWORD(mod_chipmunk,b,LOC_BODY);
    }
    else
    {
        b2 = &espacio->staticBody;
    }
    z=cpRatchetJointNew(b1,b2,*(float *)&params[2],deg2rad(*(float *)&params[3]));
    cpSpaceAddConstraint(espacio, z);
    addConstr(b1,b2,z);
    return (int)z;
}[/code]

Esta función agrega una fuerza a dos procesos (es una fuerza que actúa en los proceso hasta que se elimine), se requiere su body y se pueden agregar muchas veces en distintos puntos del cuerpo y entre varios procesos. agregando varios tipos y con distintos parámetros, hablamos de más de 5 tipos, y en un ejemplo que crean una red elástica con estas fuerzas agregan más de 5 a un sólo body en distintos puntos y del mismo tipo (spring), pero pudieran agrega aparte de cualquiera de las otras fuerzas también.

aquí no me parece buena idea poner solamente variables, sería tener decenas de locales y aún faltan funciones.

otro ejemplo es la función de intersección de boundingbox, la de contener (que revisa si un boundingbox está completamente dentro de otro)

la función que cambia entre coordenadas locales a globales también hace uso del body

la función que redefine todos los vértices de un cuerpo con forma de polígono (cualquier cantidad de vértices)

la función que aplica un impulso en un cuerpo en un punto y con una dirección

y si busco más puedo encontrar algunas más.

en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

tenes varias opciones para hacer esto:

- si el proceso no tiene el body creado al llamar esta funcion, podes crearla en ese momento accediendo a las variables locales
- podes encolar este tipo de funciones en alguna estructura interna
- podes hacer un array donde definis estas cosas, para luego procesarlas en el frame

creo que la mas simples es la primera.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

me gusta mucho la segunda por elegante...

por el momento he agregado una función para forzar la creación del body.

Ya he corregido los errores que teníamos en linux, la he probado y funciona bien

dejo las descargas al principio del tema

QuoteVeo que trae código C. ¿La puedo considerar final?
Otra cosa, para subir la librería al PPA necesito darle una licencia, ¿la librería es GPLv2, como bennu?.

Gracias Sonrisa

PD: Necesito saber también el número de versión de la librería (para facilitar el tema de las actualizaciones).

Pues ya eh entrado a la escuela, por lo tanto no podré hacerle cambios en breve, sólo puedo corregir errores y lentamente. no se si se pueda considerar final. Ya funcionan todos los test y usan lo que se necesita para hacer juegos en bennu, aunque hay funciones que aún no pruebo, pero por lo general no son muy complicadas, son funciones de la librería Chipmunk.c que se ponen al alcance del código bennu.

Sobre la licencia, no se mucho del tema, pero estoy de acuerdo en darle la misma licencia que bennu.

Para el número de versión, qué tal 0.9 mientras revisamos que no haya más errores qué corregir?

bueno, gracias y saludos.

Descargas de esta versión al principio del tema (el primer post)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

mas alla de los ejemplos, te haria falta un pequeño tutorial...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

ah si, je je,  la ayuda la tengo en aprox 1 semana. para no apresurarme...
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Fede

#111
No os estoy siguiendo mucho, porque me desbordais.  ;D

Peeeeerooooooooo....  ¡A repartir más karmas!
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

crashon182

No escribo mucho en este tema, pero lo sigo de cerca ánimos con el proyectooo!!!!  y K up!
www.elbooz.com.ar - Cursos online Gratuitos!

josebita

Gracias por los comentarios, Prg. Cuando tenga tiempo, la acabo de empaquetar y la subo.

josebita

He subido una primera versión de la librería al PPA (aún la estoy copiando al resto de versiones de la distribución). Aún no está empaquetada tan bien como me gustaría (sobre todo la libchipmunk) así que iré actualizando la versión de la librería en los próximos días sin que haya cambios de funcionalidad. A los efectos diría que ya está lista para ser instalada por los usuarios.

Prg

Quote from: josebita on February 04, 2011, 12:26:20 AM
He subido una primera versión de la librería al PPA (aún la estoy copiando al resto de versiones de la distribución). Aún no está empaquetada tan bien como me gustaría (sobre todo la libchipmunk) así que iré actualizando la versión de la librería en los próximos días sin que haya cambios de funcionalidad. A los efectos diría que ya está lista para ser instalada por los usuarios.

recuerda que le cambié el nombre a mod_chipmunk

Y recuerda también compartir en este hilo los cambios  ;)  :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

josebita

Sí, me refería a la libchipmunk de upstream. El tema es que en el netbook estoy usando Ubuntu Natty, que aún está en alfa y me daba algunos problemas al compilar la versión dinámica (.so) de la libchipmunk de forma que de momento los paquetes libchipmunk* de mi PPA sólo proporciona la librería estática (libchipmunk.a) y la mod_chipmunk se compila contra ella.
No es el mejor método, así que cuando tenga tiempo haré que se compile contra una versión dinámica de la librería.

Prg

Rápidamente he descrito cada una de las funciones, globales, locales y estructuras usadas dentro de la mod_chipmunk. La descripción está en un pdf llamado ayuda.

También he corregido algunas cosas de la librería y la he compilado tanto para windows como para ubuntu.


El link de descarga está al principio del tema.

http://forum.bennugd.org/index.php?topic=1982.msg35257#msg35257

saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

josebita

Genial, gracias :)
¿Has pensado en meter la documentación a la wiki?

Prg

Quote from: josebita on February 08, 2011, 12:12:36 AM
Genial, gracias :)
¿Has pensado en meter la documentación a la wiki?

La verdad no lo había pensado, pero si la librería pega será necesario :D

Gracias por la idea.

saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)