Spriteをサムネイルに描画するテスト

by yprops forked from テキスト表示用 (diff: 40)
♥0 | Line 66 | Modified 2011-03-03 11:34:02 | MIT License
play

ActionScript3 source code

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

// forked from yprops's テキスト表示用
package
{
    import flash.geom.Matrix;
    import flash.geom.Rectangle;
    import flash.events.*;
    import flash.display.*;
    import flash.text.*;
    
    public class DebugText extends Sprite
    {
        
        
        //------------main-----------------------
        
        
        public function main() :void{
            addDebLine("適当なSpriteをサムネイル内にいい感じにdraw()する。");
            addDebLine("指定Matrixを適用したSpriteの、指定Rectangle部分が表示されるよう描かれる大きさを調整してdraw()。");
            
            //適当なSprite用意
            var pre :Sprite = makeRectSp(100);
            pre.x = 100;
            pre.y = 100;
            addChild(pre);
            
            //サムネイル用意
            var thumb :Bitmap;
            var bmd :BitmapData = new BitmapData(50,50,false,0x00FF00);
            thumb = new Bitmap(bmd);
            thumb.x = 175;
            thumb.y = 175;
            addChild(thumb);
            
            //Matrix 指定  実際には pre.transform.matrix を使うことを想定
            var mtr :Matrix = new Matrix();
            mtr.rotate(0.5);
            //Rectangle 指定  実際には pre.parent 座標系での指定を想定
            var rct :Rectangle = new Rectangle(-20,0,120,150);
            
            //MatrixにRectangleを加味してdraw()   (rct.width != 0, rct.height != 0 であること)
            mtr.translate(-rct.x, -rct.y);
            mtr.scale(bmd.width / rct.width, bmd.height / rct.height);
            bmd.draw(pre, mtr);
        }
        
        private function makeRectSp(size :Number) :Sprite{
            var sp :Sprite = new Sprite();
            var g :Graphics = sp.graphics;
            g.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1,1], [0,255]);
            g.drawCircle(50,50,50);
            g.drawRect(0,0,size,size);
            g.endFill();
            return sp;
        }

        
        
        
        //------------general---------------------
        public function DebugText(){
            if(stage)init();
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
        private function init(ev:Event = null) :void{
            removeEventListener(Event.ADDED_TO_STAGE, init);
            addDeb(450, 450);
            main();
        }
        private var deb :TextField;
        private function addDeb(w:uint, h:uint) :void{
                deb = new TextField();
                deb.wordWrap = true;
                deb.width = w;
                deb.height = h;
                deb.border = true;
                deb.borderColor = 0;
                deb.background = true;
                deb.backgroundColor = 0x99ffffff;
                deb.text = "beginDebugText-------\n\n";
                addChild(deb);
        }
        private function addDebLine(...args) :void{
                deb.appendText(args.join(" ") + "\n");
                deb.scrollV = deb.maxScrollV;
        }
    }
}