APE Actionscript Physics Engine
Estou testando algumas engines physics para Flash/ Flex. A engine APE do Alec Cove eu já conhecia, é simples e funciona bem, porém ainda está na versão 0.45a e possui poucos métodos/propriedades além do projeto estar parado há um bom tempo.
O APE foi escrito em Actionscript 3, mas para quem trabalha com AS2, a versão antiga do APE em AS2 é o Flade.
Abaixo segue um exemplo bem simples do APE, coloquei um botão para mudar a força da massa, porém a API ainda não possui um método para isto, improvisei reaplicando valores, mas não ficou legal.
PS. o APE não suporta ser exportado para Flash Player 10, existem conflitos entre objetos Vector.
package { import flash.events.*; import flash.display.*; import org.cove.ape.*; public class baseAPE extends Sprite { private var myGrp:Group; private var n:uint = 1; public function baseAPE():void { stage.addEventListener(MouseEvent.MOUSE_DOWN, mDown); btn.addEventListener(MouseEvent.CLICK, mClik); this.initAPE(); this.mClik(null); } private function initAPE():void { var largFloor:Number = (stage.stageWidth - 50); APEngine.init(1/3); APEngine.container = this; myGrp = new Group(); myGrp.collideInternal = true; myGrp.addParticle(new RectangleParticle(100, 200, 150, 2, 0.3, true)); myGrp.addParticle(new RectangleParticle(380, 150, 200, 2, -0.3, true)); myGrp.addParticle(new RectangleParticle((largFloor * .5) + 25, stage.stageHeight - 20, largFloor, 6, 0, true)); myGrp.addParticle(new RectangleParticle((largFloor * .5) + 25, 20, largFloor, 6, 0, true)); APEngine.addGroup(myGrp); addEventListener(Event.ENTER_FRAME, onLoop); } private function mDown(evt:MouseEvent):void { if(btn.hitTestPoint(mouseX, mouseY)) return; var ball:CircleParticle = new CircleParticle(mouseX, mouseY, Math.random() * 20 + 10); ball.setFill(Math.random() * 0xFFFFFF); ball.setLine(0, 0, 0); myGrp.addParticle(ball); } private function mClik(evt:MouseEvent):void { var b:Boolean = btn.label == "Negative"; btn.label = b ? "Positive" : "Negative"; if(b) APEngine.addMasslessForce(new Vector(0 , n * -5)); else APEngine.addMasslessForce(new Vector(0 , n * 5)); n = n + 1; } private function onLoop(evt:Event):void { APEngine.step(); APEngine.paint(); } } }




April 16th, 2009 at 17:45
bom post, uso bastante a APE em meus projetos. Fiz os testes com APE e BOX2D.
April 16th, 2009 at 17:48
Legal Thiago, qual deles você tem trabalhado agora?
April 16th, 2009 at 22:14
Sem duvidas a Box2D é melhor de longe, ela tem muito mais funcionalidades, suporta objetos compostos, não só primitivos, alem de ser mais organizada e robusta.
O contra é, ela é portada do C, então trabalhar em metros é bem chato no começo, e também as classes que não tem um padrão muito comum ao flahs, mais é realmente muito melhor que a APE!
Estou no aguardo da Motor2, que vai ser o porte real da Box2D para o as3!
April 28th, 2009 at 15:54
Oi Bruno, o Motor2 já está disponível: http://code.google.com/p/motor2/