forked from: drawTrianglesの練習
forked from drawTrianglesの練習 (diff: 6)
画像サイズ400×300
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);
}
}
}
