Advertisement
Guest User

Untitled

a guest
Jan 17th, 2013
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import Box2D.Collision.b2AABB;
  4.     import Box2D.Collision.Shapes.b2CircleDef;
  5.     import Box2D.Collision.Shapes.b2CircleShape;
  6.     import Box2D.Collision.Shapes.b2PolygonDef;
  7.     import Box2D.Collision.Shapes.b2PolygonShape;
  8.     import Box2D.Collision.Shapes.b2Shape;
  9.     import Box2D.Common.Math.b2Vec2;
  10.     import Box2D.Dynamics.b2Body;
  11.     import Box2D.Dynamics.b2BodyDef;
  12.     import Box2D.Dynamics.b2World;
  13.     import flash.display.Shape;
  14.     import flash.display.Sprite;
  15.     import flash.events.Event;
  16.    
  17.     /**
  18.      * ...
  19.      * @author Erlend Hofstad Langseth
  20.      */
  21.     public class Main extends Sprite
  22.     {
  23.        
  24.         public function Main():void
  25.         {
  26.             if (stage) init();
  27.             else addEventListener(Event.ADDED_TO_STAGE, init);
  28.         }
  29.        
  30.         private var w:b2World;
  31.         private function init(e:Event = null):void
  32.         {
  33.             removeEventListener(Event.ADDED_TO_STAGE, init);
  34.             // entry point
  35.             addChild(s);
  36.            
  37.            
  38.             var bounding:b2AABB = new b2AABB();
  39.             bounding.lowerBound.Set( - 100, - 100);
  40.             bounding.upperBound.Set( 1000, 1000);
  41.             w  = new b2World(bounding, new b2Vec2(0, -10), true);
  42.             var groundBodyDef:b2BodyDef = new b2BodyDef();
  43.             groundBodyDef.position.Set(400, 580);
  44.             var groundBody:b2Body = w.CreateBody(groundBodyDef);
  45.             var groundShapeDef:b2PolygonDef = new b2PolygonDef();
  46.             groundShapeDef.SetAsBox(400, 20);
  47.             groundBody.CreateShape(groundShapeDef);
  48.             //
  49.             var circleBodyDef:b2BodyDef = new b2BodyDef();
  50.             circleBodyDef.position.Set(300, 200);
  51.             var circleBody:b2Body = w.CreateBody(circleBodyDef);
  52.             var circleDef:b2CircleDef = new b2CircleDef();
  53.             circleDef.radius = 10;
  54.             circleDef.density = 2;
  55.             circleDef.friction = 0.5;
  56.             circleBody.CreateShape(circleDef);
  57.             addEventListener(Event.ENTER_FRAME, update);
  58.         }
  59.        
  60.         private var s:Shape = new Shape();
  61.         private function update(e:Event):void
  62.         {
  63.            
  64.             trace("FRAM;E");
  65.             w.Step(1 / 30, 10);
  66.            
  67.             // DRAW
  68.             s.graphics.clear();
  69.             s.graphics.lineStyle(1, 0xaaaaaa);
  70.             s.graphics.beginFill(0x222222);
  71.            
  72.             var list:b2Body = w.GetBodyList();
  73.             var shapeList:b2Shape;
  74.             if (!list) return;
  75.             do {
  76.                 shapeList = list.GetShapeList();
  77.                 if (shapeList) {
  78.                     do {
  79.                         drawShape(shapeList, list.GetPosition().x, list.GetPosition().y);
  80.                     } while (shapeList = shapeList.GetNext());
  81.                 }
  82.                 //
  83.             } while (list = list.GetNext());
  84.         }
  85.         private function drawShape(shape:b2Shape, x:int, y:int):void
  86.         {
  87.             if (shape is b2PolygonShape) {
  88.                 var polygon:b2PolygonShape = shape as b2PolygonShape;
  89.                 var ver:Array = polygon.GetVertices();
  90.                 delUndefined(ver);
  91.                 var vec:b2Vec2;
  92.                 for (var i:int = ver.length - 1; i >= 0; i --) {
  93.                     vec = ver[i];
  94.                     if (vec) {
  95.                         trace(i, " : " , ver.length, vec.x, x, vec.y, y);
  96.                         if (i == ver.length - 1) s.graphics.moveTo(vec.x + x, vec.y + y);
  97.                         else s.graphics.lineTo(vec.x + x, vec.y + y);
  98.                     }
  99.                 }
  100.             } else if (shape is b2CircleShape) {
  101.                 var circle:b2CircleShape = shape as b2CircleShape;
  102.                 s.graphics.drawCircle(x, y, circle.GetRadius());
  103.             }
  104.         }
  105.         private function delUndefined(array:Array):void
  106.         {
  107.             for (var i:int = array.length - 1; i >= 0; i --) {
  108.                 if (array[i] == undefined) {
  109.                     array.splice(i, 1);
  110.                 }
  111.             }
  112.         }
  113.        
  114.        
  115.     }
  116.    
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement