flash on 2011-1-13

by yama3
♥0 | Line 92 | Modified 2011-01-13 17:15:17 | MIT License
play

ActionScript3 source code

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

package {
    import Box2D.Collision.b2AABB;
    import Box2D.Common.Math.b2Vec2;
    import com.actionsnippet.qbox.QuickBox2D;
    import com.actionsnippet.qbox.QuickObject;
    import flash.display.DisplayObject;
    import flash.display.DisplayObjectContainer;
    import flash.display.Graphics;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class FlashTest extends Sprite {
        private var _box2d:QuickBox2D;
        private var mc:MovieClip;
        private var bodyGroup:QuickObject;
        
        public function FlashTest(arg:*, parent:DisplayObjectContainer) {
            parent.addChild(this);
            _box2d = new QuickBox2D(addChild(new MovieClip()) as MovieClip);
            _box2d.mouseDrag();
            createWalls();            
        }
        
        private function loop(event:Event = null):void
        {
            mc.x = bodyGroup.x * 30;
            mc.y = bodyGroup.y * 30;
            mc.rotation = bodyGroup.angle * (180 / Math.PI);
        }
        
        public function start(arg:*):void {
            _box2d.start();
            addEventListener(Event.ENTER_FRAME, loop);
            createDroid(2, 2, 1);
        }
        
        private function createWalls():void
        {
            var sw:Number = _box2d.main.stage.stageWidth / 30;
            var sh:Number = _box2d.main.stage.stageHeight / 30;
            
            _box2d.addBox({x:sw/2, y:-0.5, width:sw, height:1, lineAlpha:0, fillAlpha:0, density:0.0});
            _box2d.addBox({x:sw/2, y:sh+0.5, width:sw, height:1, lineAlpha:0, density:0.0});
            _box2d.addBox({x:-0.5, y:sh/2, width:1, height:sh, lineAlpha:0, fillAlpha:0, density:0.0});
            _box2d.addBox({x:sw+0.5, y:sh/2, width:1, height:sh, lineAlpha:0, fillAlpha:0, density:0.0});
        }
        
        private function createDroid(x:Number, y:Number, scale:Number = 1, color:uint = 0xA4CA39):void
        {
            _box2d.setDefault({fillColor:color, lineAlpha:0, fillAlpha:1});
            
            mc = new MovieClip();
            var g:Graphics = mc.graphics;
            g.beginFill(color);
            g.drawRoundRect(0, 60, 120 * scale, 120 * scale, 15, 15);
            g.beginFill(0xFFFFFF);
            g.drawRect(0, 62, 120 * scale, 5 * scale);
            g.drawCircle(32 * scale, 32 * scale, 4 * scale);
            g.drawCircle(88 * scale, 32 * scale, 4 * scale);
            addChild(mc);
            
            var head:QuickObject = _box2d.addCircle(
                {x:x, y:y, radius:2*scale}
            );
            
            var earLeft:QuickObject = _box2d.addBox(
                {x:x-1.2*scale,y:y-1.8*scale,width:1*scale,height:0.2*scale,angle:1}
            );
            
            var earRight:QuickObject = _box2d.addBox (
                {x:x-1.2*scale, y:y-1.8*scale,width:1*scale,height:0.2*scale,angle:-1}
            );
            
            var bodyBox:QuickObject = _box2d.addBox (
                {x:x, y:y+1.8*scale,width:4*scale,height:4*scale,fillAlpha:0}
            );
            
            var bodyGroup = _box2d.addGroup(
                {objects:[head, bodyBox, earLeft, earRight]}
            );
            
            var circleParamsA:Object = {
                x:x-0.5*scale,
                y:y-1.0*scale,
                radius:0.5*scale
            }
            var circleParamB:Object = {
                x:x-0.5*scale,
                y:y+1.0*scale,
                radius:0.5*scale
            }
            
            var armLeft:QuickObject = _box2d.addBox(
                {x:x-0.5*scale,y:y*scale,height:2.2*scale}
            );
            var armLeftCircleA:QuickObject = _box2d.addCircle(circleParamsA);
            var armLeftCircleB:QuickObject = _box2d.addCircle(circleParamsB);
            var armLeftGroup:QuickObject = _box2d.addGroup({x:0.8 * scale, y:4.2 * scale, objects:[armLeftCircleA, armLeft, armLeftCircleB]};
            
            _box2d.addJoint({
                type:QuickBox2D.DISTANCE,
                a:armLeftGroup.body,
                b:bodyGroup.body,
            })
        }




    }
}