forked from: drawTrianglesの練習

by hacker_szoe51ih forked from drawTrianglesの練習 (diff: 6)
画像サイズ400×300
♥0 | Line 102 | Modified 2010-09-23 01:58:52 | MIT License
play

ActionScript3 source code

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

// forked from hacker_szoe51ih's drawTrianglesの練習
package {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.net.*;
    import flash.system.*;

    [SWF(width="465",height="465")]
    public class Main extends Sprite {
        
        public var bg:Sprite;
        public var handleArray:Array;
        public var zahyouArray:Array;
        public var verticies:Vector.<Number> = new Vector.<Number>();
        public var indicies:Vector.<int> = new Vector.<int>();
        public var uvData:Vector.<Number> = new Vector.<Number>();
        public var urlReq:URLRequest;
        public var lo:Loader;
        public var bmd:BitmapData;
        public var bm:Bitmap;
        public var gra:Graphics;
        public var W:Number=465;
        public var H:Number=465;

        public function Main() {
            
            //背景
            bg=new Sprite();
            addChild(bg);
            
            //画像読み込み
            urlReq=new URLRequest("http://farm5.static.flickr.com/4097/4941567163_0fa5cd2938_m.jpg");
            var myLoaderContext:LoaderContext = new LoaderContext(true);
            lo=new Loader();
            lo.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
            lo.load(urlReq,myLoaderContext);
            

        }
        public function completeHandler(e:Event):void{
            
            /*addChild(lo);*/
            lo.x=W/2-lo.width/2;
            lo.y=H/2-lo.height/2;
            
            //ハンドルポイントを作る
            zahyouArray=new Array();
            zahyouArray=[[lo.x,lo.y],[lo.x+240,lo.y],[lo.x,lo.y+180],[lo.x+240,lo.y+180]];//左上、右上、左下、右下
            handleArray=new Array();
            for(var i:int=0; i<zahyouArray.length;i++){
                var sp:Sprite=new Sprite();
                sp=makeHandle();
                handleArray.push(sp);
                addChild(handleArray[i]);
                handleArray[i].x=zahyouArray[i][0];
                handleArray[i].y=zahyouArray[i][1];
                handleArray[i].addEventListener(MouseEvent.MOUSE_DOWN,onDown);
            }
            
            mapping();
        }
        
        //マッピング
        public function mapping():void{
            
            
            for(var i:int=0; i<zahyouArray.length;i++){
                verticies.push(zahyouArray[i][0]);
                verticies.push(zahyouArray[i][1]);
            }
            indicies.push(0,1,2);
            indicies.push(1,2,3);
            uvData.push(0,0,1,0,0,1,1,1);
            
            //ロードしたloの中身をbitmapに入れる。そのbitmapdataを背景に描画する
            bm=new Bitmap();
            bm=lo.content as Bitmap;
            gra=bg.graphics;
            gra.beginBitmapFill(bm.bitmapData);
            gra.drawTriangles(verticies,indicies,uvData);
            gra.endFill();
            
            
        }
        
        //再描画
        public function upDate(e:Event):void{
            
            for(var i:int=0; i<zahyouArray.length;i++){
                zahyouArray[i][0]=handleArray[i].x;
                zahyouArray[i][1]=handleArray[i].y;
            }
            
            verticies[0]=zahyouArray[0][0];
            verticies[1]=zahyouArray[0][1];
            
            verticies[2]=zahyouArray[1][0];
            verticies[3]=zahyouArray[1][1];
            
            verticies[4]=zahyouArray[2][0];
            verticies[5]=zahyouArray[2][1];
            
            verticies[6]=zahyouArray[3][0];
            verticies[7]=zahyouArray[3][1];
            
            gra.clear();//毎回前の絵をクリアしてから描画する
            gra.beginBitmapFill(bm.bitmapData);
            gra.drawTriangles(verticies,indicies,uvData);
            gra.endFill();
            
        }
        
        //マウスドラッグ処理
        public function onDown(e:MouseEvent):void{
            e.target.startDrag(true);
            e.target.addEventListener(Event.ENTER_FRAME,enterframer);
            stage.addEventListener(MouseEvent.MOUSE_UP,onUp);
        }
        
        public function enterframer(e:Event):void{
            upDate(e);
        }
        
        public function onUp(e:MouseEvent):void{
            e.target.stopDrag();
            e.target.removeEventListener(Event.ENTER_FRAME,enterframer);
            stage.removeEventListener(MouseEvent.MOUSE_UP,onUp);
        }
        
        
        //ハンドル作成関数
        public function makeHandle():Sprite {

            var sp:Sprite=new Sprite();
            sp.graphics.beginFill(0x0000ff);
            sp.graphics.drawCircle(0,0,10);
            sp.graphics.endFill();
            return(sp);

        }

    }


}