Ejemplo de Phys2d & JavaFX.

Voy a describir un ejemplo (un hola mundo en Phys2d) del uso de la librería Phys2d y JavaFX, revisa los demos, documentación y de que se trata en:

En este sencillo ejemplo describo (de manera muy humilde, dada mi poca experiencia con los términos y uso de la librería) una pelota que cae sobre una superficie plana y revota repetidas veces disminuyendo su vote (Restitución) hasta caer al infinito o que se vaya la luz... es necesario agregar la librería de Phys2d al proyecto.

WorldFactory

Se encarga de crear y dirigir el comportamiento en mundo virtual de la superficie y pelota que usaremos. Esta clase no dibuja nada solo genera los efectos de los objetos.
 

vector: Este atributo es el encargado de definir la fuerza y dirección de la gravedad en nuestro mundo. Por ejemplo si Global.gravityY es positivo cae y mientas mayor el valor mas rápido lo hace, si es negativo se eleva, con Global.gravityX se comporta igual que en el eje de las Y.
 
world: Es como definimos a nuestro mundo, en el agregaremos todos los objetos que desarrollemos, la superficie y la pelota.
 
ground: Es la superficie en la que rebotara nuestra pelota.
 
ball: Es la pelota. Es publica por que de ella obtendremos su ubicación para otra(s) clase(s).
 
init: JavaFX no cuenta con constructores como en Java, así que esta es una manera de iniciar lo que uno desea al crear una instancia, checa esto
En la clase Global, hay un reloj (timer: Timeline) con el que generamos el tiempo virtual de nuestro mundo y es el encargado de iniciar dicho reloj.
 
Luego agregamos el suelo y la pelota al mundo que creamos
 
getWorld: Esta función se encarga de regresar un mundo con un vector que define la dirección y fuerza de la gravedad, también el número de iteraciones que se producirán a cada paso que se produzcan en nuestro mundo, estos pasos son como producidos por un reloj.
 
getGround: Esta función regresa un cuerpo, en este caso una superficie en forma de caja muy delgada y larga, pretende ser un suelo (StaticBody). Se le define su posición inicial y su coeficiente de restitución; con esto los objetos rebotaran en ella, si la pones en 0, no lo aran.
getBall: A diferencia de getGround también le agregamos el máximo de velocidad al que pueda alcanzar este objeto.
step: Esta función es importante, por que ella es la que actualiza todos los efectos de los objetos, y cada ves que hacemos una llamada a esta, nuestro mundo produce las iteraciones definidas y decide que valor dar a todos sus objetos mediande un salto ' '
Esta entre <<>>, por que step es una palabra reservada y esto produce que no se comporte así.

Global

Se encarga de definir constantes y variables del programa, normalmente las constantes van con mayúsculas y guiones bajos pero me dio flojera cambiarlas ya en la noche :P.
 
ground: Es la figura o parte gráfica (solo eso) que representa el suelo. Si me puedes explicar por que el ' ', seguro que eso esta mal por que si lo dejo normal se duplica la distancia..., no se pro que... corre el ejemplo y checa eso ok..
Lo que pasa es que el punto de posición para un cuadrado en Phys2d es el centro del rectángulo y en JFX es la esquina superior izquierda.
 
timer: Es el encargado de generar el tiempo de recarga de los datos, desde los gráficos hasta los eventos generados en ese proceso por nuestro mundo.
  es un método de la clase BallBody, sirbe para actualizar la posición gráfica (x,y) de la pelota.
  es encargado de dar el siguiente paso a las iteraciones de nuestro mundo.
world: Este es nuestro mundo que usaremos. Lo deje aquí por que se ve mejor, pero se pudo haber puesto en Main por ejemplo.
 
ball: Es nuestra pelota, ojo es un CustomNode y converge en ella lo necesario para que se comporte como un objeto real.
 

BallBody

Es el nodo encargado de dibujar y actualizar la ubicación de nuestra pelota.
 
public-init var ball: Body;: Contendrá los efectos producidos por la pelota. public-init checa esto
updateState(): Esta función actualiza los datos de la ubicación de la pelota.

Stage

Bueno es el que lanza todo nuestro programa.
 

Nota: Es un hola mundo en Phys2d, y es muy compleja para mí, si alguien sabe algo de ella seria bueno que contribuyese, o si corres el ejemplo y juegas con el lo que pueda y saca cosa interesantes, o aun que no lo sean son útiles todas los tip, insisto por mínimo que sea :P, te agradeceré mucho.
En realidad hay muy poca documentación de Phys2d, incluso de como desarrollar un ejemplo sencillo, no dudes en comentarme alguna sugerencia o duda, y ya veremos como nos la resolvemos o corregimos.
Seria bueno tener una biblioteca de ejemplos de Phys2D.

Nos leemos pronto y pasatela bien.

AdjuntoTamaño
ball.png5.75 KB

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Nopalin

me parece una muy buena

me parece una muy buena libreria, gracias por el aporte.
Saludos