//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();
|