In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

[朝ワン] Matrix の勉強2

[朝ワン] Matrix の勉強2 回転
赤い丸 : どこを中心に回転させるか。
青い丸 : 赤い点(回転の中心)をどこに表示させるか。
それぞれドラッグできる。
Get Adobe Flash player
by bkzen 02 Jul 2009
/**
 * Copyright bkzen ( http://wonderfl.net/user/bkzen )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/vDxe
 */

package 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Rectangle;
    import flash.events.MouseEvent;
    import flash.geom.Matrix;
    
    /**
     * [朝ワン] Matrix の勉強2 回転
     * 赤い丸 : どこを中心に回転させるか。
     * 青い丸 : 赤い点(回転の中心)をどこに表示させるか。
     * それぞれドラッグできる。
     * 
     */
    [SWF(width = "465", height = "465", backgroundColor = "0xFFFFFF", frameRate = "30")]
    public class Asawon3 extends Sprite
    {
        private var bmd:BitmapData;
        private var sh: Shape;
        private var bg:Sprite;
        private var hand:Sprite;
        private var hand2:Sprite;
        private var bounds:Rectangle;
        private var frame: int;
        
        public function Asawon3() 
        {
            // write as3 code here..
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e: Event = null): void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // さぁはじめよ。
            
            // 矢印書いた。方向が分かれば何でもよかったけどとりあえずこれで。
            sh = new Shape();
            var g: Graphics = sh.graphics;
            g.beginFill(0xFFFFFF);
            g.lineStyle(1);
            g.moveTo(20, 30);
            g.lineTo(90, 30);
            g.lineTo(90, 0);
            g.lineTo(150, 50);
            g.lineTo(90, 100);
            g.lineTo(90, 70);
            g.lineTo(20, 70);
            g.lineTo(20, 30);
            
            bg = new Sprite(); // 入れ物
            hand = new Sprite(); // ハンドル 1 
            hand2 = new Sprite(); // ハンドル 2
            addChild(bg);
            g = bg.graphics;
            g.beginFill(0xCCCCCC);
            g.drawRect(0, 0, 190, 455);
            bg.x = bg.y = 10;
            bounds = new Rectangle(0, 0, 190, 455);
            
            g = hand.graphics;
            g.beginFill(0xCC3333);
            g.drawCircle(0, 0, 5);
            g = hand2.graphics;
            g.beginFill(0x3333CC);
            g.drawCircle(0, 0, 5);
            hand.buttonMode = true;
            hand2.buttonMode = true;
            hand.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            hand2.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            hand.x = (sh.width + sh.getRect(this).left) / 2;
            hand.y = (sh.height + sh.getRect(this).top) / 2;
            bg.addChild(sh);
            bg.addChild(hand);
            bg.addChild(hand2);
            
            // 表示
            bmd = new BitmapData(265, 455, true, 0x0);
            var bmp: Bitmap = Bitmap(addChild(new Bitmap(bmd)));
            bmp.x = 200;
            bmp.y = 10;
            addEventListener(Event.ENTER_FRAME, loop);
        }
        
        private function onMouseDown(e:MouseEvent):void 
        {
            var h: Sprite = Sprite(e.target);
            bg.addChild(h);
            h.startDrag(false, bounds);
            h.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            h.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        }
        
        private function onMouseUp(e:MouseEvent):void 
        {
            var h: Sprite = Sprite(e.target);
            h.stopDrag();
            h.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        }
        
        private function loop(e:Event):void 
        {
            bmd.lock();
            bmd.fillRect(bmd.rect, 0x0);
            var matrix: Matrix = new Matrix();
            matrix.translate(- hand.x, - hand.y);
            matrix.rotate(frame * Math.PI / 180);
            matrix.translate(hand2.x, hand2.y);
            bmd.draw(sh, matrix, null, null, null, true);
            bmd.unlock();
            frame++;
            
        }
    }
}