Box2D ボール

by Makoto_Tanaka forked from flash on 2010-1-26 (diff: 22)
♥0 | Line 54 | Modified 2010-01-29 13:20:12 | MIT License
play

ActionScript3 source code

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

// forked from Makoto_Tanaka's flash on 2010-1-26
package {
    import flash.display.Sprite;
    import Box2D.Collision.b2AABB;
    import Box2D.Common.Math.b2Vec2;
    import Box2D.Dynamics.b2World;
    import Box2D.Dynamics.b2BodyDef;
    import Box2D.Collision.Shapes.b2PolygonDef;
    import Box2D.Dynamics.b2Body;
    import Box2D.Dynamics.b2DebugDraw;
    import flash.events.Event;
    import Box2D.Collision.Shapes.b2CircleDef;
    
    public class FlashTest extends Sprite {
    		
    		private static const DRAW_SCALE:Number = 100;
    		
    		private var _world:b2World;
    		private var _bBall:b2Body;
    		
        public function FlashTest() {
        		var bg:Sprite = new Sprite;
        		bg.graphics.beginFill(0, 0.5);
        		bg.graphics.drawRect(0,0,500,500);
        		bg.graphics.endFill();
        		addChild(bg);
        		
        		// 世界の作成
            var worldRegion:b2AABB = new b2AABB();
            worldRegion.lowerBound.Set(-1, -1);
            worldRegion.upperBound.Set(6.5, 5);
            var gravity:b2Vec2 = new b2Vec2(0, 9.8);
            _world = new b2World(worldRegion, gravity, true);
            
            // 床の作成
            var bdFloor:b2BodyDef = new b2BodyDef();
            bdFloor.position.Set(5.5 / 2, 3);
            var pdFloor:b2PolygonDef = new b2PolygonDef();
            pdFloor.SetAsBox(2, 0.15);
            var bFloor:b2Body = _world.CreateBody(bdFloor);
            bFloor.CreateShape(pdFloor);
            
            // ボールの作成
            var bdBall:b2BodyDef = new b2BodyDef();
            bdBall.position.Set(5.5 / 2, 1);
            var pdBall:b2CircleDef = new b2CircleDef();
            pdBall.radius = 1;
            pdBall.density = 1;
            pdBall.restitution = 0.5;
            _bBall = _world.CreateBody(bdBall);
            _bBall.CreateShape(pdBall);
            _bBall.SetMassFromShapes();
			
            var dd:b2DebugDraw = new b2DebugDraw();
            dd.m_sprite = this;
            dd.m_drawScale = DRAW_SCALE;
            dd.m_fillAlpha = 0.3;
            dd.SetFlags(b2DebugDraw.e_shapeBit);
            _world.SetDebugDraw(dd);
            
            addEventListener(Event.ENTER_FRAME, _enterFrameHandler);
        }
        
        private function _enterFrameHandler(eventObj:Event):void {
        	_world.Step(1 / 24, 10);
        }	
    }
}

Forked