drawTrianglesをやってみた

前から興味があったdrawTriangleに触ってみました。

デモ

これは画像の4隅を頂点にして、その四角形を三角形二つに分けています。

結構簡単でびっくりしました。

package
{
    import __AS3__.vec.Vector;
    
    import flash.display.Bitmap;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;

    [SWF(backgroundColor="#000000")]
    public class DrawTriangle01 extends Sprite
    {
    	[Embed(source='Dock.jpg')]
        private var img:Class;
        private var bmp:Bitmap=new img();
    	private var p1:DrugPoint, p2:DrugPoint, p3:DrugPoint, p4:DrugPoint;
    	private var t:Shape=new Shape();
    	private var vec:Vector.<Number>, uvtData:Vector.<Number>;
    	private var indices:Vector.<int>;
    	
        public function DrawTriangle01()
        {
        	stage.scaleMode = StageScaleMode.NO_SCALE;
        	stage.align = StageAlign.TOP_LEFT;
        	
            vec = new Vector.<Number>();
            vec.push(100,100,400,100,100,400,400,400);
            indices = new Vector.<int>();
            indices.push(0,1,2,1,2,3);
            uvtData=new Vector.<Number>();
            uvtData.push(0, 0, 1, 0, 0, 1, 1, 1);
            
            addChild(t);

            p1 = new DrugPoint(100,100);
            p2 = new DrugPoint(400,100);
            p3 = new DrugPoint(100,400);
            p4 = new DrugPoint(400,400);
            addChild(p1);
            addChild(p2);
            addChild(p3);
            addChild(p4);
            
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        private function onEnterFrame(event:Event):void{
        	vec=Vector.<Number>([p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y]);
        	t.graphics.clear();
        	t.graphics.beginBitmapFill(bmp.bitmapData);
            t.graphics.drawTriangles(vec, indices, uvtData);
            t.graphics.endFill();
        }
    }
}
	import flash.events.MouseEvent;
	import flash.display.Sprite;
	

class DrugPoint extends Sprite{
	public function DrugPoint(x:Number, y:Number, color:uint=0xff0000){
		this.x = x;
		this.y = y;
		graphics.beginFill(color);
		graphics.drawCircle(0,0,5);
		graphics.endFill();
		addEventListener(MouseEvent.MOUSE_DOWN, function():void{ startDrag(); });
		addEventListener(MouseEvent.MOUSE_UP, function():void{ stopDrag(); });
	}
}