APE (Actionscript Physics Engine). Prueba I.

APE (Actionscript Physics Engine). Prueba I.

Etiquetas: RectangleParticle addParticle CircleParticle step paint APEngine

Imagen en reemplazo de flash
APE es un motor de físicas para flash (AS3). Esta escrito y mantenido por Alec Cove, y se puede descargar de aquí. La utilización de la librería de puede resumir en estos pasos (doy por hecho que se han descargado las clases y se ha indicado a Flash donde están):
  • Se crea una escena APE
  • Se crea una variable de tipo grupo y se asocia a la escena.
  • Se crean partículas y constrains, y se meten en ese grupo. Esta es mi primera película creada con APE:

    1. //Importo las clases necesarias
    2. import org.cove.ape.*;
    3. import flash.events.Event;
    4. import flash.events.KeyboardEvent;
    5. import flash.display.Sprite;
    6.  
    7. //Variable de tipo grupo. Va a almacenar todas las partículas y constrains del escenario APE
    8. var grupoColisiones:Group;
    9.  
    10. //Inicializa la escena
    11. function Empezar(){
    12. 	//Creo el motor
    13. 	CrearAPE();
    14. 	//Añado los elementos APE al escenario
    15. 	CrearEscenario();
    16. 	//Añado un listener para que ejecute la función Run, que se encarga de realizar los cálculos 
    17. 	// y mover todas las partículas incluidas en el grupoColisiones
    18. 	addEventListener(Event.ENTER_FRAME, Run);
    19. }
    20.  
    21. //Crea el escenario APE
    22. function CrearAPE(){
    23. 	APEngine.init(1/4);
    24. 	var contenedor:MovieClip = new MovieClip()
    25. 	APEngine.container = contenedor;
    26. 	addChild(contenedor);
    27. 	APEngine.addForce(new VectorForce(false,0,2));
    28. 	grupoColisiones = new Group();
    29. 	APEngine.addGroup(grupoColisiones);
    30. 	grupoColisiones.collideInternal = true;
    31. }
    32.  
    33. //Crea los elementos del escenario
    34. function CrearEscenario(){
    35.  
    36. 	//Añado un visor de FPS
    37. 	var FPS:FrameRate = new FrameRate();
    38. 	FPS.setPosition(20,0);
    39. 	addChild(FPS);
    40. 	//Creo un suelo y dos paredes
    41. 	CrearRectangulo(200,395,400,10,0,true,1,0.1,0);
    42. 	CrearRectangulo(0,200,10,400,Math.PI,true,1,0.1,0);
    43. 	CrearRectangulo(400,200,10,400,Math.PI,true,1,0.1,0);
    44. 	//Creo cuatro rampas
    45. 	CrearRectangulo(50,100,200,10,Math.PI/4,true,1,0.1,0);
    46. 	CrearRectangulo(200,200,150,10,3*Math.PI/4,true,1,0.1,0);
    47. 	CrearRectangulo(300,200,150,10,3*Math.PI/4,true,1,0.1,0);
    48. 	CrearRectangulo(100,300,150,10,Math.PI/4,true,1,0.1,0);
    49.  
    50. 	//Creo un Timer para que cree circulos de tamaño aleatorio (se va a ejecutar 100 veces, una cada 500 ms)
    51. 	var tiempo = new Timer(500,100);
    52. 	tiempo.addEventListener("timer",Circulo);
    53. 	function Circulo(event:TimerEvent):void {
    54. 			CrearCirculo(Math.random() * 400,0 ,Math.random() * 20 + 5 ,false,1,0.5,0);
    55. 	}
    56. 	tiempo.start();
    57. }
    58.  
    59. /*//Crea un rectángulo
    60. Esta función crea un rectángulo. Los rectángulos tienen los siguientes atributos:
    61. 	-x,y,ancho,alto y rotación(en radianes)
    62. 	-fixed:Boolean, indica si la partícula es fija o no. En este ejemplo las rampas y paredes tienen fixed = true
    63. 				y lo círculos fixed = false;
    64. 	-mass: masa
    65. 	-elasticity:elasticidad. El valor predeterminado es 0.3, un valor mayor significa más elasticidad.
    66. 	-friction: fricción
    67. */
    68.  
    69. function CrearRectangulo(X,Y,ancho,alto,rot,est,masa,ela,fri){
    70. 	var rp:RectangleParticle = new RectangleParticle(X,Y,ancho,alto,rot,est,masa,ela,fri);
    71. 	grupoColisiones.addParticle(rp);
    72. }
    73.  
    74. /*//Crea un círculo
    75. Esta función crea un círculo. Los círculos tienen los siguientes atributos:
    76. 	-x,y,radio
    77. 	-fixed:Boolean, indica si la partícula es fija o no. En este ejemplo las rampas y paredes tienen fixed = true
    78. 				y lo círculos fixed = false;
    79. 	-mass: masa
    80. 	-elasticity:elasticidad. El valor predeterminado es 0.3, un valor mayor significa más elasticidad.
    81. 	-friction: fricción
    82. */
    83. function CrearCirculo(X,Y,radio,est,masa,ela,fri){
    84. 	var circ = new CircleParticle(X,Y,radio,est,masa,ela,fri);
    85. 	grupoColisiones.addParticle(circ);
    86. }
    87.  
    88. //Ejecuta el APEngine en cada enterFrame
    89. function Run(e:Event):void {
    90.     APEngine.step();
    91.     APEngine.paint();
    92. }
    93.  
    94. //Empezamos
    95. Empezar();

    Descargar archivos

    Comentarios

      No hay comentarios

    Dejar un comentario
    Tu nombre (obligatorio):

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

    Web:

    Comentario: