Flash10のGraphicsクラスの新メソッドdrawTriangles

GraphicsクラスのdrawTrianglesを使ってみました。
なかなかに良かったですよ〜〜。
三角形だけじゃなく、
moveToやlineToの方でもほしかったですね。
画像を面白い具合に変形させることができるので・・・^^


実行結果の図です。



三角形にBitmapDataの指定部分を張り付けるため、
画像変形が三角形で独立してしまう部分は気にくわないですね。
これの使い道は、いろいろありそうな気がするのですが、
現状は思いつかないです・・・。


このソースコードを下に載せておきます。

package {
	import __AS3__.vec.Vector;
	
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	[SWF(width=800, height=600, backgroundColor=0xAADDFF)]

	public class Main04 extends Sprite {
		
		[Embed(source="images/yama.jpg")] private var P1:Class;
		private var image:Bitmap = new P1();
		
		private var mousePoints:Vector.<Sprite> = new Vector.<Sprite>();
		
		public function Main04() {
			initMousePoint();
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function initMousePoint():void {
			for (var i:int=0; i<4; i++) {
				var sp:Sprite = new Sprite();
				sp.x = i % 2 * 200 + 100;
				sp.y = int(i/2) * 200 + 100;
				
				sp.graphics.lineStyle(3);
				sp.graphics.beginFill(0xFF0000, 0.5);
				sp.graphics.drawCircle(0, 0, 10);
				sp.graphics.endFill();
				
				addChild(sp);
				
				sp.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
				sp.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
				
				mousePoints[i] = sp;
			}
		}
				
		private function drawTriangle():void {
			var path1:Vector.<Number> = new Vector.<Number>();
			var path2:Vector.<Number> = new Vector.<Number>();
			for (var i:int=0; i<mousePoints.length; i++) {
				var mousePoint:Sprite = mousePoints[i];
				if (i < 3) {
					path1[2*i] = mousePoint.x;
					path1[2*i+1] = mousePoint.y;
				}
				if (i > 0) {
					path2[2*(i-1)] = mousePoint.x;
					path2[2*(i-1)+1] = mousePoint.y;
				}
			}
			
			var uv1:Vector.<Number> = Vector.<Number>([0, 0, 1, 0, 0, 1]);
			var uv2:Vector.<Number> = Vector.<Number>([1, 0, 0, 1, 1, 1]);
			
			graphics.clear();
			graphics.beginBitmapFill(image.bitmapData);
			graphics.drawTriangles(path1, null, uv1);
			graphics.drawTriangles(path2, null, uv2);
			graphics.endFill();
		}
		
		private function onMouseDown(event:MouseEvent):void {
			Sprite(event.currentTarget).startDrag();
		}
		
		private function onMouseUp(event:MouseEvent):void {
			Sprite(event.currentTarget).stopDrag();
		}
		
		private function onEnterFrame(event:Event):void {
			drawTriangle();
		}
		
	}
}