forked from: Box2D

by awef forked from Box2D (diff: 35)
♥0 | Line 79 | Modified 2009-04-23 17:30:51 | MIT License
play

ActionScript3 source code

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

// forked from awef's Box2D

package
{
    import flash.events.Event;
    import flash.display.Sprite;
    
    import Box2D.Collision.b2AABB;
    import Box2D.Collision.Shapes.b2PolygonDef;
    import Box2D.Common.Math.b2Vec2;
    import Box2D.Dynamics.b2DebugDraw;
    import Box2D.Dynamics.b2Body;
    import Box2D.Dynamics.b2BodyDef;
    import Box2D.Dynamics.b2World;
    
    [SWF(backgroundColor="#FFFFFF", frameRate="60")]
    
    public class main extends Sprite
    {
        private var world : b2World;
        
        public function main()
        {
            var worldAABB : b2AABB = new b2AABB();
            
            worldAABB.lowerBound.Set(-50, -50);
            worldAABB.upperBound.Set(50, 50);
            
            var gravity : b2Vec2 = new b2Vec2(0, 10);
            
            world = new b2World(worldAABB, gravity, true);
            
            // 板
            var floorBodyDef : b2BodyDef;
            var floorShapeDef : b2PolygonDef;
            var floor : b2Body;
            
            // 上
            floorBodyDef = new b2BodyDef();
            floorBodyDef.position.Set(25, 0);
            floorShapeDef = new b2PolygonDef();
            floorShapeDef.SetAsBox(25, 0.2);
            floor = world.CreateBody(floorBodyDef);
            floor.CreateShape(floorShapeDef);
            // 下
            floorBodyDef = new b2BodyDef();
            floorBodyDef.position.Set(25, 50);
            floorShapeDef = new b2PolygonDef();
            floorShapeDef.SetAsBox(25, 0.2);
            floor = world.CreateBody(floorBodyDef);
            floor.CreateShape(floorShapeDef);
            // 左
            floorBodyDef = new b2BodyDef();
            floorBodyDef.position.Set(0, 25);
            floorShapeDef = new b2PolygonDef();
            floorShapeDef.SetAsBox(0.2, 25);
            floor = world.CreateBody(floorBodyDef);
            floor.CreateShape(floorShapeDef);
            // 右
            floorBodyDef = new b2BodyDef();
            floorBodyDef.position.Set(50, 25);
            floorShapeDef = new b2PolygonDef();
            floorShapeDef.SetAsBox(0.2, 25);
            floor = world.CreateBody(floorBodyDef);
            floor.CreateShape(floorShapeDef);
            
            // 箱
            
            var bodyDef : b2BodyDef;
            var shapeDef : b2PolygonDef;
            var body : b2Body;
            
            for(var i : uint = 0; i < 30; i++)
            {
                bodyDef = new b2BodyDef();
                bodyDef.position.Set(24 + Math.random() * 2, 25);
                
                shapeDef  = new b2PolygonDef();
                shapeDef.SetAsBox(1, 1);
                shapeDef.density = 1;
                shapeDef.restitution = 1.1;
                
                body = world.CreateBody(bodyDef);
                body.CreateShape(shapeDef);
                body.SetMassFromShapes();
            }
            
            // 描写設定
            var debugDraw : b2DebugDraw = new b2DebugDraw();
            debugDraw.m_sprite = this;
            debugDraw.m_drawScale = 9;
            debugDraw.m_fillAlpha = 1;
            debugDraw.m_lineThickness = 1;
            debugDraw.m_drawFlags = b2DebugDraw.e_shapeBit;
            world.SetDebugDraw(debugDraw);
            
            
            stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        
        private function enterFrameHandler(e : Event) : void
        {
            world.Step(1 / 60, 10);
        }
    }
}