flash on 2013-2-28

by ohisama
♥0 | Line 79 | Modified 2013-02-28 07:35:06 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.display.Graphics;
    import Box2D.Dynamics.*;
    import Box2D.Collision.*;
    import Box2D.Common.Math.*;
    import Box2D.Collision.Shapes.b2PolygonDef;
    import Box2D.Collision.Shapes.b2CircleDef;
    [SWF(backgroundColor="#000000", width="475", height="475")]
    public class Main extends Sprite
    {
        private var m_world : b2World;
        public function Main()
        {
            var worldAABB : b2AABB = new b2AABB;
            worldAABB.lowerBound.Set(-300.0, -300.0);
            worldAABB.upperBound.Set(300.0, 300.0);
            var gravity : b2Vec2 = new b2Vec2(0, 0);
            m_world = new b2World(worldAABB, gravity, true);
            for (var i : int = 0; i < 7; i++)
            {
                var boxShape : b2CircleDef = new b2CircleDef();
                boxShape.radius = 10;
                boxShape.density = 8;
                boxShape.friction = 8;
                boxShape.restitution = 0.5;
                var bodyDef : b2BodyDef = new b2BodyDef();
                bodyDef.position.Set(100, i * 25 + 25);
                var userData : Sprite = new Sprite();
                var graphics : Graphics = userData.graphics;
                graphics.beginFill(Math.random() * 0xffffff, 1);
                graphics.drawCircle(0, 0, 10);
                graphics.endFill();
                bodyDef.userData = userData;
                var body : b2Body = m_world.CreateBody(bodyDef);
                body.CreateShape(boxShape);
                body.SetMassFromShapes();
                addChild(bodyDef.userData);
            }
            var ballshape : b2CircleDef = new b2CircleDef();
            ballshape.radius = 20;
            ballshape.density = 8;
            ballshape.friction = 8;
            ballshape.restitution = 0.9;
            var balldef : b2BodyDef = new b2BodyDef();
            balldef.position.Set(200, 100);
            var userData0 : Sprite = new Sprite();
            var graphics0 : Graphics = userData0.graphics;
            graphics0.beginFill(0xff0000, 1);
            graphics0.drawCircle(0, 0, 20);
            graphics0.endFill(); 
            balldef.userData = userData0;
            var ball : b2Body = m_world.CreateBody(balldef);
            ball.CreateShape(ballshape);
            var pow : b2Vec2 = new b2Vec2(-10, 0);
            ball.SetLinearVelocity(pow);
            ball.SetMassFromShapes();
            addChild(balldef.userData); 
            addEventListener(Event.ENTER_FRAME, onUpdateHandler);
        }
        private function onUpdateHandler(event : Event = null) : void
        {
            var m_iterations : int = 20;
            var m_timeStep : Number = 1.0 / 30.0;
            m_world.Step(m_timeStep, m_iterations);
            for (var bb : b2Body = m_world.m_bodyList; bb; bb = bb.m_next)
            {
                if (bb.m_userData is Sprite)
                {
                    bb.m_userData.x = bb.GetPosition().x;
                    bb.m_userData.y = bb.GetPosition().y;
                    bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
                }
            }
        }
    }
}