domingo, 12 de abril de 2009

Prueba Ape Physics - Flex 3

Nota: Haz Click sobre el ejemplo, dentro de la zona gris claro.




Esto es una prueba de la librería APE Physis, les posteo el código el cual fue tomado en principio por un ejemplo posteado y fue modificado por nosotros para ver el desempeño de la librería.


Codigo:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#444444"
creationComplete="initApp()" verticalAlign="top" horizontalAlign="left"  >

<mx:Script>
<![CDATA[
import flash.sampler.DeleteObjectSample;
import org.cove.ape.AbstractCollection;
import org.cove.ape.WheelParticle;
import org.cove.ape.RectangleParticle;
import org.cove.ape.AbstractParticle;
import org.cove.ape.Group;
import org.cove.ape.CircleParticle;
import org.cove.ape.Vector;
import org.cove.ape.APEngine;
[Embed(source='/assets/testApeLogo.swf', symbol='renito')]
[Bindable]
public var imgCls:Class;


private var contentHolder:Sprite=new Sprite();

private var defaultGroup:Group=new Group();

private var mousePosition:Point;
private var myTimer:Timer;

private function deleteObjects(e:TimerEvent):void
{
trace("TICK");
var len:int = defaultGroup.getAll().length-1;
var part:AbstractParticle;
for(var i:int =len; i>=0;i--){
trace((alto+100 < AbstractParticle(defaultGroup.getAll()[i]).position.y) + " "+(alto+100) +"<"+AbstractParticle(defaultGroup.getAll()[i]).position.y);
if(alto+100 < AbstractParticle(defaultGroup.getAll()[i]).position.y)
{
part = defaultGroup.getAll()[i];
defaultGroup.removeParticle(part);
delete(part as Object);

}

}
}
private function refreshTimer(e:TimerEvent):void
{
trace("NEW TIMER");
myTimer.removeEventListener(TimerEvent.TIMER,deleteObjects)
myTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,refreshTimer);
myTimer.stop();
myTimer = null;
myTimer = new Timer(10*1000,Number.MAX_VALUE);
myTimer.addEventListener(TimerEvent.TIMER,deleteObjects);
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE,refreshTimer);
myTimer.start();
}

private function initApp():void{

myTimer = new Timer(10*1000,Number.MAX_VALUE);
myTimer.addEventListener(TimerEvent.TIMER,deleteObjects);
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE,refreshTimer);
myTimer.start();
spriteWrapper.addChild(contentHolder);
addEventListener(Event.ENTER_FRAME,run);
APEngine.init(1/3);
APEngine.container=contentHolder;
APEngine.addMasslessForce(new Vector(0,9.8));


defaultGroup.collideInternal=true;


ground=new RectangleParticle(viewScreen.width/2,viewScreen.height-40,viewScreen.width-50,40,0,true);
ground.setFill(0xCCCCCC);

defaultGroup.addParticle(ground);
APEngine.addGroup(defaultGroup);
viewScreen.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
ancho = viewScreen.width;
alto= viewScreen.height;
}
private var ground:RectangleParticle;
private var ancho:Number = 0;
private var alto:Number = 0 ;
private var hijos:int =0;
private function run(e:Event):void{
APEngine.step();
APEngine.paint();

if(hijos != defaultGroup.getAll().length){
hijos = defaultGroup.getAll().length;
trace(defaultGroup.getAll().length);
}
if(ancho != viewScreen.width || alto != viewScreen.height){
defaultGroup.removeParticle(ground);
ground=new RectangleParticle(viewScreen.width/2,viewScreen.height-40,viewScreen.width-50,40,0,true);
ground.setFill(0xCCCCCC);
defaultGroup.addParticle(ground);


}

}
private function addSelectedParticle():void{
var createdParticle:AbstractParticle;
if(radiobutton1.selected)
createdParticle=createCircle();
if(radiobutton2.selected)
createdParticle=createRectangle();
if(radiobutton3.selected)
createdParticle=createWheel();

createdParticle.setFill(itemColor.selectedColor);
defaultGroup.addParticle(createdParticle);

}

private function createCircle():AbstractParticle{
var circle:CircleParticle=new CircleParticle(mousePosition.x,mousePosition.y,circleRadius.value,isFixed.selected,myMasa.value,elastico.value,roce.value);
return circle;

}
private function createRectangle():AbstractParticle{
var rectangle:RectangleParticle = new RectangleParticle(mousePosition.x,mousePosition.y,circleRadius.value*2,circleRadius.value*2,0,isFixed.selected,myMasa.value,elastico.value,roce.value);
return rectangle;
}
private function createWheel():AbstractParticle{
var wheel:WheelParticle = new WheelParticle(mousePosition.x,mousePosition.y,circleRadius.value,isFixed.selected,myMasa.value,elastico.value,roce.value,1);
return wheel;
}
private function onMouseDown(e:MouseEvent):void
{
mousePosition=new Point(e.localX,e.localY);
addSelectedParticle();
}

]]>
</mx:Script>


<mx:HBox width="100%" height="100%" >
<mx:VBox   backgroundColor="0xEEEEEE" cornerRadius="5" borderStyle="solid" borderThickness="1">
<mx:Form>
<mx:FormItem label="Forma del Objeto">
<mx:RadioButtonGroup id="particleGroup"/>
<mx:RadioButton label="Circulo" id="radiobutton1"  groupName="particleGroup" selected="true"/>
<mx:RadioButton label="Cuadrado" id="radiobutton2" groupName="particleGroup" />
<mx:RadioButton label="Rueda" id="radiobutton3" groupName="particleGroup"/>
</mx:FormItem>
<mx:FormItem label="Masa">
<mx:NumericStepper minimum="1" maximum="100000" stepSize="1000" id="myMasa" value="1"/>       
</mx:FormItem>
<mx:FormItem label="Radio/Ancho y Alto">
<mx:NumericStepper minimum="1" maximum="100" stepSize="5" id="circleRadius" value="20"/>
</mx:FormItem>
<mx:FormItem label="Constante de Elasticidad">
<mx:NumericStepper minimum="0" maximum="1" stepSize="0.01" id="elastico" value="0.3"/>
</mx:FormItem>
<mx:FormItem label="Constante de Roce">
<mx:NumericStepper minimum="0" maximum="1" stepSize="0.01" id="roce" value="0.01"/>
</mx:FormItem>
<mx:FormItem label="Color del Relleno">
<mx:ColorPicker id="itemColor" selectedColor="0xFF0000"/>
</mx:FormItem>
<mx:FormItem label="Afectado por la Fuerzas">
<mx:CheckBox id="isFixed" fontStyle="normal" fontWeight="bold" fontSize="14"/>
</mx:FormItem>
</mx:Form>
</mx:VBox>
<mx:Canvas id="viewScreen"  width="100%" height="100%"  backgroundColor="#FFFFFF" backgroundAlpha=".3" borderStyle="solid" borderThickness="1" cornerRadius="5" verticalScrollPolicy="off" horizontalScrollPolicy="off">

<mx:Image rotation="-45" alpha="1" x="{viewScreen.width/2}" y="{viewScreen.height/2}" source="{imgCls}" horizontalAlign="center" verticalAlign="middle" />

<mx:UIComponent id="spriteWrapper" width="100%" height="100%"/>

</mx:Canvas>
</mx:HBox>

</mx:Application>


Descargar Archivos:

No hay comentarios.:

Publicar un comentario