APE (Actionscript Physics Engine). Prueba I.

Etiquetas: RectangleParticle addParticle CircleParticle step paint APEngine

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:
  • //Importo las clases necesarias
    import org.cove.ape.*;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.display.Sprite;
     
    //Variable de tipo grupo. Va a almacenar todas las partículas y constrains del escenario APE
    var grupoColisiones:Group;
     
    //Inicializa la escena
    function Empezar(){
    	//Creo el motor
    	CrearAPE();
    	//Añado los elementos APE al escenario
    	CrearEscenario();
    	//Añado un listener para que ejecute la función Run, que se encarga de realizar los cálculos 
    	// y mover todas las partículas incluidas en el grupoColisiones
    	addEventListener(Event.ENTER_FRAME, Run);
    }
     
    //Crea el escenario APE
    function CrearAPE(){
    	APEngine.init(1/4);
    	var contenedor:MovieClip = new MovieClip()
    	APEngine.container = contenedor;
    	addChild(contenedor);
    	APEngine.addForce(new VectorForce(false,0,2));
    	grupoColisiones = new Group();
    	APEngine.addGroup(grupoColisiones);
    	grupoColisiones.collideInternal = true;
    }
     
    //Crea los elementos del escenario
    function CrearEscenario(){
     
    	//Añado un visor de FPS
    	var FPS:FrameRate = new FrameRate();
    	FPS.setPosition(20,0);
    	addChild(FPS);
    	//Creo un suelo y dos paredes
    	CrearRectangulo(200,395,400,10,0,true,1,0.1,0);
    	CrearRectangulo(0,200,10,400,Math.PI,true,1,0.1,0);
    	CrearRectangulo(400,200,10,400,Math.PI,true,1,0.1,0);
    	//Creo cuatro rampas
    	CrearRectangulo(50,100,200,10,Math.PI/4,true,1,0.1,0);
    	CrearRectangulo(200,200,150,10,3*Math.PI/4,true,1,0.1,0);
    	CrearRectangulo(300,200,150,10,3*Math.PI/4,true,1,0.1,0);
    	CrearRectangulo(100,300,150,10,Math.PI/4,true,1,0.1,0);
     
    	//Creo un Timer para que cree circulos de tamaño aleatorio (se va a ejecutar 100 veces, una cada 500 ms)
    	var tiempo = new Timer(500,100);
    	tiempo.addEventListener("timer",Circulo);
    	function Circulo(event:TimerEvent):void {
    			CrearCirculo(Math.random() * 400,0 ,Math.random() * 20 + 5 ,false,1,0.5,0);
    	}
    	tiempo.start();
    }
     
    /*//Crea un rectángulo
    Esta función crea un rectángulo. Los rectángulos tienen los siguientes atributos:
    	-x,y,ancho,alto y rotación(en radianes)
    	-fixed:Boolean, indica si la partícula es fija o no. En este ejemplo las rampas y paredes tienen fixed = true
    				y lo círculos fixed = false;
    	-mass: masa
    	-elasticity:elasticidad. El valor predeterminado es 0.3, un valor mayor significa más elasticidad.
    	-friction: fricción
    */
     
    function CrearRectangulo(X,Y,ancho,alto,rot,est,masa,ela,fri){
    	var rp:RectangleParticle = new RectangleParticle(X,Y,ancho,alto,rot,est,masa,ela,fri);
    	grupoColisiones.addParticle(rp);
    }
     
    /*//Crea un círculo
    Esta función crea un círculo. Los círculos tienen los siguientes atributos:
    	-x,y,radio
    	-fixed:Boolean, indica si la partícula es fija o no. En este ejemplo las rampas y paredes tienen fixed = true
    				y lo círculos fixed = false;
    	-mass: masa
    	-elasticity:elasticidad. El valor predeterminado es 0.3, un valor mayor significa más elasticidad.
    	-friction: fricción
    */
    function CrearCirculo(X,Y,radio,est,masa,ela,fri){
    	var circ = new CircleParticle(X,Y,radio,est,masa,ela,fri);
    	grupoColisiones.addParticle(circ);
    }
     
    //Ejecuta el APEngine en cada enterFrame
    function Run(e:Event):void {
        APEngine.step();
        APEngine.paint();
    }
     
    //Empezamos
    Empezar();

    Comentarios:
    No hay comentarios
    Dejar un comentario:
    Tu nombre (obligatorio):

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

    Web: