flash on 2010-4-25

by termat
♥0 | Line 61 | Modified 2010-04-25 22:47:47 | MIT License
play

ActionScript3 source code

/**
 * Copyright termat ( http://wonderfl.net/user/termat )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gKDs
 */

package
{
	import Box2D.Collision.b2AABB;
	import Box2D.Collision.Shapes.b2PolygonDef;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2DebugDraw;
	import Box2D.Dynamics.b2World;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	[SWF(width="460", height="460", frameRate="30", backgroundColor="0x000000")]
	public class HelloBox2d extends Sprite{
		private var world:b2World;
		
		public function HelloBox2d() {
			var worldAABB:b2AABB = new b2AABB();
			worldAABB.lowerBound.Set(-100, -100);
			worldAABB.upperBound.Set(100, 100);
			var grav:b2Vec2 = new b2Vec2(0, 10);
			world = new b2World(worldAABB, grav, true);
			var draw:b2DebugDraw = new b2DebugDraw();
			draw.m_sprite = this;
			draw.m_drawScale = 100;
			draw.m_fillAlpha = 0.3;
			draw.m_lineThickness = 1;
			draw.m_drawFlags = b2DebugDraw.e_shapeBit;
			world.SetDebugDraw(draw);
			createGround();
			addEventListener(Event.ENTER_FRAME, update);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
		}
		
		private function update(e:Event):void {
			world.Step(1 / 30, 10);
		}
		
		private function onDown(e:MouseEvent):void {
			var xx:Number = (e.stageX - 230) / 230 * 2.0 + 2.5;
			var yy:Number = (e.stageY - 230) / 230 * 2.0 + 2.0;
			createBox(xx, yy);
		}
		
		private function createGround():void {
			var groundBody:b2BodyDef = new b2BodyDef();
			groundBody.position.Set(2.5, 3);
			var groundShape:b2PolygonDef = new b2PolygonDef();
			groundShape.SetAsBox(2, 0.1);
			var ground:b2Body = world.CreateBody(groundBody);
			ground.CreateShape(groundShape);
		}
		
		private function createBox(xx:Number, yy:Number):void {
			var boxBody:b2BodyDef = new b2BodyDef();
			boxBody.position.Set(xx, yy);
			var boxShape:b2PolygonDef = new b2PolygonDef();
			boxShape.SetAsOrientedBox(0.2*Math.random()+0.05, 0.2*Math.random()+0.05, new b2Vec2(0, 0), Math.random());
			boxShape.density = 1;
			boxShape.restitution = 0.2;
			var box:b2Body = world.CreateBody(boxBody);
			box.CreateShape(boxShape);
			box.SetMassFromShapes();
		}
	}
}