<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()" viewSourceURL="srcview/index.html" width="500" height="350"> <mx:Metadata> [SWF( frameRate="100")] </mx:Metadata> <mx:Script> <![CDATA[ import org.papervision3d.lights.PointLight3D; import flash.utils.getTimer; import org.papervision3d.objects.DisplayObject3D; import com.pricope.miti.odedemo.PCube; import com.pricope.miti.odedemo.IPObject; import com.pricope.miti.odedemo.PSphere; import org.ode.OdeInit; import mx.collections.ArrayCollection; private var world:uint; private var contactGroup:uint; private var objects:ArrayCollection = new ArrayCollection(); private var space:uint; private var view:MyView; private function init():void { OdeInit.dInitODE2(new Number(0)); world = OdeInit.dWorldCreate(); OdeInit.dWorldSetGravity(world,0,-9.8,0); space = OdeInit.dSimpleSpaceCreate(0); var tmSphere:PSphere = new PSphere(world,space,60,100,0,10,1,0.2); objects.addItem(tmSphere); tmSphere = new PSphere(world,space,1,150,0,10,1,0.2); objects.addItem(tmSphere); tmSphere = new PSphere(world,space,60,150,0,10,1,0.2); objects.addItem(tmSphere); tmSphere = new PSphere(world,space,60,180,1,10,1,0.2); objects.addItem(tmSphere); var c:PCube = new PCube(world,space,0,0,0,200,1,200); objects.addItem(c); c = new PCube(world,space, 100,100,0,1, 198, 200); objects.addItem(c); c = new PCube(world,space, -100,100,0,1, 198, 200); objects.addItem(c); c = new PCube(world,space, 0,100,100,198, 198, 1); objects.addItem(c); c = new PCube(world,space, 0,100,-100,198, 198, 1); objects.addItem(c); c = new PCube(world,space, 0,200,0,200, 1, 200); objects.addItem(c); contactGroup = OdeInit.dJointGroupCreate(0); view = new MyView(); view.camera.zoom +=70; view.camera.moveLeft(400); view.camera.moveUp(600); var o3d:DisplayObject3D = new DisplayObject3D(); o3d.x = 0; o3d.y = 50; o3d.z = 0; view.camera.target = o3d; for (var i:int = 0; i < objects.length;i++) { IPObject(objects.getItemAt(i)).draw(view.scene); } container.addChild(view); view.startRendering(); stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); } private var T:int = getTimer(); private function onEnterFrame(e:Event):void { for (var i:int = 0; i < objects.length;i++) { IPObject(objects.getItemAt(i)).refresh(); } OdeInit.dSpaceCollide(space,collideCallback); OdeInit.dWorldStep(world,0.05); OdeInit.dJointGroupEmpty(contactGroup); OdeInit.dSpaceCollide(space,collideCallback); OdeInit.dWorldStep(world,0.05); OdeInit.dJointGroupEmpty(contactGroup); OdeInit.dSpaceCollide(space,collideCallback); OdeInit.dWorldStep(world,0.05); OdeInit.dJointGroupEmpty(contactGroup); var fps:Number = 1000/(getTimer() - T); T = getTimer(); lFPS.text = "FPS: " + String(int(fps)); } public function collideCallback(o1:uint, o2:uint):void { var b1:uint, b2:uint; b1 = OdeInit.dGeomGetBody(o1); b2 = OdeInit.dGeomGetBody(o2); var contact:uint = OdeInit.alloc_dContact(); var sParams:Object = {"mode":0x004,"mu":1,"bounce":1}; OdeInit.setContactSurfaceParams(contact,sParams); var nContact:int = OdeInit.dCollide(o1,o2,1,contact); if (nContact > 0) { var c:uint = OdeInit.dJointCreateContact(world,contactGroup,contact); OdeInit.dJointAttach(c,b1,b2); } OdeInit.free(contact); } ]]> </mx:Script> <mx:UIComponent width="500" height="350" id="container" /> <mx:Label x="10" y="10" id="lFPS" text="Label"/> </mx:Application>