FOAM parte I: Hola Mundo

FOAM parte I: Hola Mundo

Etiquetas: Foam useMouseDragger solverIterations addGlobalForceGenerator RigidBody addElement INFINITE_MASS createRectangle

Imagen en reemplazo de flash
FOAM es un motor de físicas escrito es Actionscript 3.0. Ha sido liberado este mes (Noviembre de 2007) por Drew F. Cummins bajo licencia MIT. Se puede bajar de aquí:

  • http://blog.generalrelativity.org/

    Además ya está disponible la documentación aquí:

  • http://lab.generalrelativity.org/foam/docs/

    En las primeras pruebas que he hecho, he podido ver que es igual de fácil que aprender que el APE, y algunas diferencias que postearé cuando tenga un mayor control de ambos. De momento, este es mi primer ejemplo, hecho a partir de uno colgado en la página del autor.

    1. //Importo las clases necesarias
    2. import flash.display.Sprite;
    3. import org.generalrelativity.foam.Foam;
    4. import flash.events.*;
    5. import org.generalrelativity.foam.dynamics.element.ISimulatable;
    6. import org.generalrelativity.foam.dynamics.element.body.RigidBody;
    7. import org.generalrelativity.foam.dynamics.enum.Simplification;
    8. import org.generalrelativity.foam.util.ShapeUtil;
    9. import org.generalrelativity.foam.dynamics.force.Gravity;
    10. import org.generalrelativity.foam.math.Vector;
    11. import org.generalrelativity.foam.dynamics.force.Friction;
    12. import org.generalrelativity.foam.dynamics.force.spring.RigidBodyBungee;
    13. import org.generalrelativity.foam.view.Renderable;
    14. import org.generalrelativity.foam.dynamics.element.body.Circle;
    15.  
    16. //Creo las variables "generales" de la película
    17. const FALL_LIMIT:int = 1000;
    18. var foam:Foam;
    19.  
    20. //Función que contruye la escena
    21. function Empezar(){
    22. 	CrearFPS();
    23. 	CrearEscenaFoam();
    24. 	CrearElementos();
    25. 	CrearEscenario();
    26. 	//Inicializa el motor FOAM
    27. 	foam.simulate();
    28.  
    29.  
    30. }
    31.  
    32. //Crea una instancia de FPS  para ver a cuantos fps va la película (clase personalizada)
    33.  
    34. function CrearFPS(){
    35. 	var FPS = new FrameRate();
    36. 	FPS.setPosition(30,20);
    37. 	addChild(FPS);
    38. }
    39. //Crea la instancia de FOAM y añade las fuerzas globales a la escena
    40. function CrearEscenaFoam(){
    41. 	//Creo la escena FOAM
    42. 	foam = addChild( new Foam() ) as Foam;
    43. 	//Habilito el arrastre por medio de ratón en la escena
    44. 	foam.useMouseDragger( true );
    45. 	foam.solverIterations = 2;
    46. 	//Añado fuerza de gravedad y fricción como fuerzas globales de la escena
    47. 	foam.addGlobalForceGenerator( new Gravity( new Vector( 0, 1.3 ) ) );
    48. 	foam.addGlobalForceGenerator( new Friction( 0.01 ) );
    49. }
    50.  
    51. //Crea los elementos dinámicos dentro de la escena 
    52. function CrearElementos() {
    53. 	//Crea 20 polígonos con 1-6 lados
    54. 	for (var i:int = 0; i < 11; i++) {
    55. 		//generan la posicion x-y, el tamaño, y el numero de vértices
    56. 		var rx:Number = 50 + Math.random() * 600;
    57. 		var ry:Number = -150 + Math.random() * 200;
    58. 		var rSize:Number = 20 + Math.random() * 20;
    59. 		var rNumVertices:Number = 2 + Math.floor( Math.random() * 5 );
    60. 		//crea un cuerpo con los parámetros aleatorios que hemos creado. 
    61. 		var body:RigidBody = new RigidBody( rx, ry, rSize, ShapeUtil.createSymmetricPolygon( rNumVertices, rSize ) );
    62. 		//añade un cuerpo a la escena
    63. 		foam.addElement( body );
    64.  
    65. 	}
    66. 	//Además de crear polígonos con la sintaxis anterior, también se pueden crear círculos con la sintaxis
    67. 	//(x,y,radio):
    68. 	foam.addElement( new Circle( 100, -100, 40 ));
    69. 	foam.addElement( new Circle( 100, -90, 30 ));
    70. }
    71.  
    72. //Crea las paredes, el suelo y las rampas
    73. function CrearEscenario(){
    74. 	//Paredes
    75. 	foam.addElement( new RigidBody( 0, 50, Simplification.INFINITE_MASS, ShapeUtil.createRectangle( 40, 700 ) ) );//Izquierda
    76. 	foam.addElement( new RigidBody( 700, 50, Simplification.INFINITE_MASS, ShapeUtil.createRectangle( 40, 700 ) ) );//Derecha
    77. 	//Suelo
    78. 	foam.addElement( new RigidBody( 350, 400, Simplification.INFINITE_MASS, ShapeUtil.createRectangle( 700, 40) ) );
    79. 	//Techo
    80. 	foam.addElement( new RigidBody( 350, -300, Simplification.INFINITE_MASS, ShapeUtil.createRectangle( 700, 40 ) ) );
    81. }
    82.  
    83. Empezar();

    Descargar archivos

    Comentarios

      No hay comentarios

    Dejar un comentario
    Tu nombre (obligatorio):

    E-mail (obligatorio, no se mostrará):

    Web:

    Comentario: