2ball test maninofu forked:0favorite:0lines:100license : All rights reserved modified : 2009-04-20 00:53:45 Embed Tweet package { import flash.display.Sprite; import flash.events.*; import Box2D.Common.Math.b2Vec2; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.*; import Box2D.Dynamics.Joints.*; public class FlashTest extends Sprite { private static const DRAW_SCALE:Number=100; private var world:b2World; private var shape1:b2Shape; private var shape2:b2Shape; private var mouseJoint:b2MouseJoint; private var boxBeginX:Number; private var boxBeginY:Number; public function FlashTest():void { // Frame world var worldAABB:b2AABB = new b2AABB(); worldAABB.lowerBound.Set(-100,-100); worldAABB.upperBound.Set( 100, 100); world = new b2World(worldAABB, new b2Vec2(0,0), false); var debugDraw:b2DebugDraw = new b2DebugDraw(); debugDraw.m_sprite = this; debugDraw.m_drawScale = DRAW_SCALE; debugDraw.m_fillAlpha = 1; debugDraw.m_lineThickness = 1; debugDraw.m_drawFlags = b2DebugDraw.e_shapeBit; // wall var wallShapeDef0:b2PolygonDef = new b2PolygonDef();wallShapeDef0.SetAsBox(2.0, 0.1); var wallShapeDef1:b2PolygonDef = new b2PolygonDef();wallShapeDef1.SetAsBox(0.1, 1.5); var body0:b2BodyDef = new b2BodyDef();body0.position.Set(2.5,0.4); world.CreateBody(body0).CreateShape(wallShapeDef0); var body1:b2BodyDef = new b2BodyDef();body1.position.Set(2.5,3.2); world.CreateBody(body1).CreateShape(wallShapeDef0); var body2:b2BodyDef = new b2BodyDef();body2.position.Set(0.6,1.8); world.CreateBody(body2).CreateShape(wallShapeDef1); var body3:b2BodyDef = new b2BodyDef();body3.position.Set(4.4,1.8); world.CreateBody(body3).CreateShape(wallShapeDef1); // ball var shapeDef:b2CircleDef = new b2CircleDef(); shapeDef.radius = 0.2; shapeDef.density = 1.0; shapeDef.restitution = 0.2; var bodydef:b2BodyDef = new b2BodyDef();bodydef.position.Set(3,3); var ball1:b2Body = world.CreateBody(bodydef); shape1 = ball1.CreateShape(shapeDef); ball1.SetMassFromShapes(); var bodydef2:b2BodyDef = new b2BodyDef();bodydef2.position.Set(2,2); var ball2:b2Body = world.CreateBody(bodydef2); shape2 = ball2.CreateShape(shapeDef); ball2.SetMassFromShapes(); // evt && draw stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); addEventListener(Event.ENTER_FRAME, update); world.SetDebugDraw(debugDraw); } private function update(event:Event):void {world.Step(1/24, 10);} private function mouseDownHandler(event:MouseEvent):void { if (!mouseJoint){ var body:b2Body = null; var vec:b2Vec2 = new b2Vec2(event.stageX / DRAW_SCALE, event.stageY / DRAW_SCALE); if (shape1.TestPoint(shape1.GetBody().GetXForm(),vec)) body = shape1.GetBody(); else if (shape2.TestPoint(shape2.GetBody().GetXForm(),vec)) body = shape2.GetBody(); if (body) { var md:b2MouseJointDef = new b2MouseJointDef(); md.maxForce = 5; md.body1 = world.GetGroundBody(); md.body2 = body; md.target.Set(event.stageX / DRAW_SCALE, event.stageY / DRAW_SCALE); mouseJoint = world.CreateJoint(md) as b2MouseJoint; } else { boxBeginX = event.stageX; boxBeginY = event.stageY; } } } private function mouseMoveHandler(event:MouseEvent):void { if (mouseJoint) mouseJoint.SetTarget(new b2Vec2(event.stageX / DRAW_SCALE, event.stageY / DRAW_SCALE) as b2Vec2); } private function mouseUpHandler(event:MouseEvent):void { if (mouseJoint) { world.DestroyJoint(mouseJoint); mouseJoint = null; } else { var x:Number = (event.stageX + boxBeginX) / 2 / DRAW_SCALE; var y:Number = (event.stageY + boxBeginY) / 2 / DRAW_SCALE; var halfWidth:Number = Math.abs(event.stageX - boxBeginX) / 2 / DRAW_SCALE; var halfHeight:Number = Math.abs(event.stageY - boxBeginY) / 2 / DRAW_SCALE; var wallShapeDef0:b2PolygonDef = new b2PolygonDef(); wallShapeDef0.SetAsBox(halfWidth,halfHeight); wallShapeDef0.restitution = 1.2; var body0:b2BodyDef = new b2BodyDef(); body0.position.Set(x,y); world.CreateBody(body0).CreateShape(wallShapeDef0); } } } } Code Fullscreen Preview Fullscreen box2d b2BodyDef CreateBody b2PolygonDef stageY stageX shape2 shape1 b2Vec2 GetXForm GetBody b2Shape b2Body b2DebugDraw b2MouseJointDef b2MouseJoint b2CircleDef b2World TestPoint Set b2DebugDraw.e_shapeBit