
Etiquetas: APEngine addForce addGroup collideInternal RectangleParticle CircleParticle WheelParticle SpringConstraint addParticle addConstraint angularVelocity
//Importo las clases necesariasimport org.cove.ape.*;
import flash.events.*;
import flash.display.Sprite;
//Variable de tipo grupo. Va a almacenar todas las partículas y constrains del escenario APEvar grupoColisiones:Group;//Inicializa la escenafunction Empezar(){
//Creo el motorCrearAPE();
//Añado los elementos APE al escenarioCrearEscenario();
//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 grupoColisionesaddEventListener(Event.ENTER_FRAME, Run);
}//Crea el escenario APEfunction 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 escenariofunction CrearEscenario(){
//Añado un visor de FPSvar FPS:FrameRate = new FrameRate();
FPS.setPosition(20,15);
addChild(FPS);
//Creo un suelo y dos paredesCrearRectangulo(350,395,700,10,0,true,1,0.1,0);
CrearRectangulo(0,200,10,400,Math.PI,true,1,0.1,0);
CrearRectangulo(700,200,10,400,Math.PI,true,1,0.1,0);
//Creo bolas "movibles" en el suelofor(var i = 0; i<40; i++){
CrearCirculo(i*20 + 6,-100,8,false,1,0.4,0);
} //Creo la "bici" con la que va a interactuar el usuarioCrearBici()
}/*CrearRectangulo()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írculoEsta 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);
}//Hace una bicifunction CrearBici(){
/* Creo dos variables del tipo WheelParticle. La sintaxis de la defición es: WheelParticle(x:Number, y:Number, radius:Number, fixed:Boolean = false, mass:Number = 1 ,elasticity:Number = 0.3, friction:Number = 0, traction:Number = 1) */var rueda1 = new WheelParticle(200,0,20,false,1,0.3,0.1,0.5);
var rueda2 = new WheelParticle(240,0,5,false,1,0.3,0.1,0.5);
/*Creo una variable del tipo SpringConstraint. Los constraints son "limitaciones" que imponemos en el modelo. Por ejemplo, en este caso creamos un constraint entre las dos ruedas que va a hacer que estas siempre estén a la misma distancia. La sintaxis es: SpringConstraint(p1:AbstractParticle, p2:AbstractParticle, stiffness:Number = 0.5 , collidable:Boolean = false, rectHeight:Number = 1, rectScale:Number = 1 , scaleToLength:Boolean = false) */var lim = new SpringConstraint(rueda1, rueda2,1,false, 1, 1,false)
//Añado el constraint y las dos ruedas al grupoColisionesgrupoColisiones.addParticle(rueda1);
grupoColisiones.addParticle(rueda2);
grupoColisiones.addConstraint(lim);
//Pongo el foco en el escenario para que funcione el tecladostage.focus = this;
//Creo las funciones que se van a ejecutar al pulsar las teclas izquierda y derecha del teclado. //Al pulsarlas modifico el parámetro "angularVelocity" de las ruedas. function Mover(e:KeyboardEvent){
if(e.keyCode == 39){;
rueda1.angularVelocity = 3;
rueda2.angularVelocity = 3;
}else
if(e.keyCode == 37){;
rueda1.angularVelocity = -3;
rueda2.angularVelocity = -3;
} }function Parar(e:KeyboardEvent){
if((e.keyCode == 37) ||(e.keyCode == 39)){;
rueda1.angularVelocity = 0;
rueda2.angularVelocity = 0;
} }addEventListener(KeyboardEvent.KEY_DOWN,Mover);
addEventListener(KeyboardEvent.KEY_UP,Parar);
//Añado listeners para que se pueda mover con el ratónfunction MoverIzq(e:MouseEvent){
rueda1.angularVelocity = -3;
rueda2.angularVelocity = -3;
}function MoverDer(e:MouseEvent){
rueda1.angularVelocity = 3;
rueda2.angularVelocity = 3;
}function PararRaton(e:MouseEvent){
rueda1.angularVelocity = 0;
rueda2.angularVelocity = 0;
}Izquierda_bt.addEventListener(MouseEvent.MOUSE_DOWN,MoverIzq);
Izquierda_bt.addEventListener(MouseEvent.MOUSE_UP,PararRaton);
Derecha_bt.addEventListener(MouseEvent.MOUSE_DOWN,MoverDer);
Derecha_bt.addEventListener(MouseEvent.MOUSE_UP,PararRaton);
}//Ejecuta el APEngine. La ejecuto cada enterFramefunction Run(e:Event):void {
APEngine.step();
APEngine.paint();
}//EmpezamosEmpezar();