flash on 2011-2-18

by yama3
♥0 | Line 124 | Modified 2011-02-18 14:51:42 | 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/rzo8
 */

package {
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    
    public class FlashTest extends Sprite {
        private var drList:Array;
        
        public function FlashTest() {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.stageFocusRect = false;
            
            drList = [];
            
            for(var i:int=0; i < 1; ++i)
            {
                drList[drList.length] = new DragRotater(
                    addChild(new Card(
                        250,
                        250,
                        200,
                        200,
                        Math.random()*360)
                        ) as Sprite
                );
            }            
        }
    }
}

import flash.display.Sprite;
class Card extends Sprite
{
    public function Card(x:Number, y:Number, w:Number, h:Number, r:Number)
    {
        graphics.beginFill(Math.random() * 0xffffff);
        graphics.drawRoundRect(-w * .5, -h * .5, w, h, 16, 16);
        graphics.endFill();
        this.x = x;
        this.y = y;
        rotation = r;
    }
}

import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
class DragRotater
{
    protected var x:Number;
    protected var y:Number;
    protected var r:Number;
    protected var vx:Number = .0;
    protected var vy:Number = .0;
    protected var vr:Number = .0;
    protected var aax:Number = .0;
    protected var aay:Number = .0;
    protected var mass:Number = .30;
    protected var damp:Number = .69;
    protected var mx0:Number;
    protected var my0:Number;
    protected var my0:Number;
    protected var free:Boolean = true;
    protected var _skin:Sprite;
    
    public function DragRotater(skin:Sprite = null)
    {
        this.skin = skin;
    }
    
    public function get skin():Sprite {return _skin;}
    public function set skin(v:Sprite):void
    {
        if(skin) uninit(null);
        _skin = v;
        if(skin) {
            if(skin.stage) init(null);
            else skin.addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
        }
    }
    
    protected function init(e:Event):void
    {
        skin.addEventListener(Event.REMOVED_FROM_STAGE, uinit);
        skin.sddEventListener(Event.ENTER_FRAME, onEnterFrame);
        skin.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        skin.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        
        x = skin.x;
        y = skin.y;
        r = skin.rotation;
    }
    protected function uninit(e:Event):void
    {
        skin.removeEventListener(Event.REMOVED_FROM_STAGE, uninit);
        skin.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        skin.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        skin.stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    }
    
    protected function onMouseUp(e:MouseEvent):void
    {
        aax = aay = 0;
        free = true;
    }
    
    protected function onMouseDown(e:MouseEvent):void
    {
        mx0 = skin.parent.mouseX;
        my0 = skin.parent.mousey;
        free = false;
    }
    
    protected function onEnterFrame(e:Event):void 
    {
        if(free)
        {
            
        }
        else
        {
            var mx:Number = skin.parent.mouseX;
            var my:Number = skin.parent.mouseY;
            var dmx:Number = mx - mx0;
            var dmy:Number = my - my0;
            
            var fx:Number = (dmx - vx) * mass;
            var fy:Number = (dmy - vy) * mass;
            var ax:Number = mx - x;
            var ay:Number = my - y;
            var t:Number = fx * ay - fy * ax;
            
            vr += t * .005;
        }
        
        r -= vr;
        vr *= damp;
        skin.rotation = r;
    }
}