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(); } } }