« WCAN mini ActionScript Vol.4 しゃべる人募集 | メイン | ヒゲチェン »

Box2DFlashAS3はじめてみた

del.icio.us it!   hatena bookmark
Flash Physics Engine Box2DFlashAS3 1.4.3
http://box2dflash.sourceforge.net/ サンプルを見ながら作ってみた。

クリックすると箱が出てきます。
このコンテンツには最新のFlashPlayerが必要です


ソースダウンロード
package {

    import flash.display.*;
    import flash.events.*;

    import Box2D.Dynamics.*;
    import Box2D.Collision.*;
    import Box2D.Collision.Shapes.*;
    import Box2D.Common.Math.*;


    public class Box2DSample01 extends MovieClip {

        private var m_world:b2World;
        private var m_iterations:int = 10;
        private var m_timeStep:Number = 1/30;
        
        public function Box2DSample01() {
            
            addEventListener(Event.ENTER_FRAME, update);
            stage.addEventListener(MouseEvent.CLICK, createBox);

            var worldAABB:b2AABB = new b2AABB();
            worldAABB.minVertex.Set(-1000.0, -100.0);
            worldAABB.maxVertex.Set(1000.0, 1000.0);

            var gravity:b2Vec2 = new b2Vec2(0.0, 300.0);
            var doSleep:Boolean = true;

            m_world = new b2World(worldAABB, gravity, doSleep);
            
            createGround();
        }


        private function createGround():void {
            
            var bodyDef:b2BodyDef;
            var boxDef:b2BoxDef;

            bodyDef = new b2BodyDef();
            boxDef = new b2BoxDef();
            boxDef.extents.Set(1000, 100);
            boxDef.friction = 0.3;
            bodyDef.position.Set(0, 380);
            bodyDef.AddShape(boxDef);

            bodyDef.userData = new ground();
            bodyDef.userData.width = boxDef.extents.x * 2;
            bodyDef.userData.height = boxDef.extents.y * 2;

            addChild(bodyDef.userData);
            m_world.CreateBody(bodyDef);

        }

        
        private function createBox(e:MouseEvent):void {

            var bodyDef:b2BodyDef;
            var boxDef:b2BoxDef;

            bodyDef = new b2BodyDef();
            boxDef = new b2BoxDef();
            boxDef.extents.Set(15, 15);
            boxDef.density = 1.0;
            boxDef.friction = 0.5;
            boxDef.restitution = 0.2;
            bodyDef.AddShape(boxDef);
            bodyDef.userData = new box();
            bodyDef.userData.width = boxDef.extents.x * 2;
            bodyDef.userData.height = boxDef.extents.y * 2;
            bodyDef.position.x = stage.mouseX;
            bodyDef.position.y = stage.mouseY;
            bodyDef.rotation = Math.random() * Math.PI / 8;

            m_world.CreateBody(bodyDef);
            addChild(bodyDef.userData);
            
        }


        private function update(e:Event):void {

            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.m_position.x;
                    bb.m_userData.y = bb.m_position.y;
                    bb.m_userData.rotation = bb.m_rotation * (180/Math.PI);
                }
            }
        }       
    }
}


トラックバック

このエントリーのトラックバックURL:
http://un-q.net/mt-tb.cgi/257

コメントを投稿

crossreview