2011-04-07

syntaxhighlighter_2.1.364 效果測試

測試 syntaxhighlighter_2.1.364 效果:
↓-----------------------------------------------↓



package
{
 import Box2D.Collision.Shapes.b2CircleShape;
 import Box2D.Collision.Shapes.b2PolygonShape;
 import Box2D.Common.Math.b2Vec2;
 import Box2D.Dynamics.b2Body;
 import Box2D.Dynamics.b2BodyDef;
 import Box2D.Dynamics.b2DebugDraw;
 import Box2D.Dynamics.b2FixtureDef;
 import Box2D.Dynamics.b2World;

 import fl.controls.Button;

 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;

 /**
  * @author laqu
  */
 public class Index extends Sprite
 {
  const WIDTH : uint = 400;
  const HEIGHT : uint = 300;
  const OBJ_NUM : uint = 20;

  private var _world : b2World;
  private var _fixtureDef : b2FixtureDef;
  private var _m_physScale : uint = 100;
  private var _m_sprite : Sprite;
  private var _m_iterations : int = 10;
  private var _m_timeStep : Number = 1 / 30;
  private var _m_positionIterations : uint = 10;
  private var _objArr : Array = [];
  private var _btn:Button;

  public function Index()
  {
   init();
  }

  private function init() : void
  {
   var i : uint;
   var gravity : b2Vec2 = new b2Vec2(0, 10);

   _world = new b2World(gravity, true);
   _fixtureDef = new b2FixtureDef();

   var bodyDef : b2BodyDef = new b2BodyDef();

   //壁・上下左右
   var wallBody : b2Body;
   var wallDef : b2PolygonShape = new b2PolygonShape();
   var wallWidth : Array = [WIDTH / 2,5];
   var wallHeight : Array = [5,HEIGHT / 2];
   var wallX : Array = [WIDTH / 2,0 ,WIDTH / 2,WIDTH];
   var wallY : Array = [0,HEIGHT / 2,HEIGHT,HEIGHT / 2];
   _fixtureDef.density = 1;
   _fixtureDef.friction = 1;
   _fixtureDef.shape = wallDef;

   for(i = 0;i < 4;i++)
   {
    bodyDef.position.Set(wallX[i] / _m_physScale, wallY[i] / _m_physScale);
    wallDef.SetAsBox(wallWidth[i % 2] / _m_physScale, wallHeight[i % 2] / _m_physScale);
    wallBody = _world.CreateBody(bodyDef);
    wallBody.CreateFixture(_fixtureDef);
   }

   //Circle
   var circleDef : b2CircleShape = new b2CircleShape();
   _fixtureDef.friction = 10;
   _fixtureDef.density = 10;
   _fixtureDef.restitution = 0.9;
   _fixtureDef.shape = circleDef;
   bodyDef.type = b2Body.b2_dynamicBody;

   for(i = 0;i < OBJ_NUM;i++)
   {
    var radius : uint = Math.random() * 20 + 10;
    circleDef.SetRadius(radius / _m_physScale);
    bodyDef.position.Set(Math.random() * WIDTH / _m_physScale, Math.random() * HEIGHT / _m_physScale);
    var circleBody : b2Body = _world.CreateBody(bodyDef);
    circleBody.CreateFixture(_fixtureDef);
    _objArr.push(circleBody);
   }

   //Box
   var boxDef : b2PolygonShape = new b2PolygonShape();
   _fixtureDef.friction = 1;
   _fixtureDef.density = 1;
   _fixtureDef.restitution = 0.1;
   _fixtureDef.shape = boxDef;
   bodyDef.type = b2Body.b2_dynamicBody;

   for(i = 0;i < OBJ_NUM;i++)
   {
    var boxWidth : uint = Math.random() * 20 + 5;
    var boxHeight : uint = Math.random() * 20 + 5;
    boxDef.SetAsBox(boxWidth / _m_physScale, boxHeight / _m_physScale);
    bodyDef.position.Set(Math.random() * WIDTH / _m_physScale,Math.random() * HEIGHT / _m_physScale);
    var boxBody:b2Body = _world.CreateBody(bodyDef);
    boxBody.CreateFixture(_fixtureDef);
    _objArr.push(boxBody);
   }

   //DebugDraw
   _m_sprite = new Sprite();
   addChild(_m_sprite);

   var debugDraw : b2DebugDraw = new b2DebugDraw();
   debugDraw.SetSprite(_m_sprite);
   debugDraw.SetFillAlpha(0.3);
   debugDraw.SetDrawScale(_m_physScale);
   debugDraw.SetLineThickness(1);
   debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
   _world.SetDebugDraw(debugDraw);

   addEventListener(Event.ENTER_FRAME, update);

   //Btn
   _btn = new Button();
   _btn.label = "Button";
   _btn.x = _btn.y = 20;
   _btn.addEventListener(MouseEvent.CLICK, btnClick);
   addChild(_btn);
  }

  //ボタンをクリックしたら上方向に力を加える
  private function btnClick(e : MouseEvent) : void
  {
   for(var  i : uint = 0;i < OBJ_NUM*2;i++)
   {
    var body:b2Body = _objArr[i] as b2Body;
    body.SetLinearVelocity(new b2Vec2(0,-Math.random()*10));
    //SetAwakeしないと全てのオブジェクトが静止した場合に動かない
    body.SetAwake(true);
   }
  }

  //レンダリング
  private function update(e : Event) : void
  {
   _world.Step(_m_timeStep, _m_iterations, _m_positionIterations);
   _world.ClearForces();
   _world.DrawDebugData();
  }
 }
}