drawTriangles - FlashPlayer 10 新绘图方法
- 06月 20th, 2008
-
drawTriangles本质上是来虚拟3D的。
drawTriangles的第一个参数:vertices:Vector.。这是唯一的一个必要参数,可以指定6个(3对)Number(int不可以),作为Triangle的三个顶点。或者指定6*N个Number,来同时绘出N个Triangles。
drawTriangles的第二个参数:indices:Vector.。当使用这个参数的时候,drawTriangles的第一个参数vertices的length就不需要为6*N了。Flash会根据第二个参数indices来确定所绘制的Triangles的顶点位置,例如<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute"> <mx:Script> <![CDATA[ import mx.core.UIComponent; private var UI:UIComponent = new UIComponent(); public function init():void { addChild(UI); UI.graphics.beginFill(0xFFFFFF); UI.graphics.drawTriangles(Vector.<Number>([10,10, 100,100, 100,10, 110, 110, 200, 200, 200, 110]), Vector.<int>([0,1,2, 2,4,5])) } ]]> </mx:Script> </mx:Application>这个例子先在第一个参数中指定了12个(6对)点。
然后用第二个参数来制定,使用哪三个点,来绘制Triangle。
当然,第一个参数中,可以只设置4个,或者8个点(非6的倍数)。drawTriangles的第三个参数:uvtData:Vector.<Number>。这个参数是对填充的图案进行切割的参数。这个参数有两种取值可能。一:8个(4对)值,指定4个点来确定进行切割的四边形。二:12个(4对)值,指定4个点,以及这四个点的相对比例。如下例所示
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute"> <mx:Script> <![CDATA[ import flash.display.BitmapData; import mx.core.UIComponent; private var UI:UIComponent = new UIComponent(); [Embed(source = 'Image.jpg')] private var FuturImage:Class; private var bitmapData:BitmapData = (new FuturImage() as Bitmap).bitmapData; private var x1:Number = -100, y1:Number = -100, z1:Number = 0, t1:Number = 0; private var x2:Number = 100, y2:Number = -100, z2:Number = 0, t2:Number = 0; private var x3:Number = 100, y3:Number = 100, z3:Number = 0, t3:Number = 0; private var x4:Number = -100, y4:Number = 100, z4:Number = 0, t4:Number = 0; private var indices:Vector.<int> = new Vector.<int>(); private var vertices:Vector.<Number> = new Vector.<Number>(); private var uvtData:Vector.<Number> = new Vector.<Number>(); public function init():void { vertices.push(x1,y1, x2*0.5,y2*0.5, x3*0.5,y3*0.5, x4,y4); indices.push(0, 1, 3, 1, 2, 3); uvtData.push(0,0,1, 1,0,.5, 1,1,.5, 0,1,1); UI.x = 200; UI.y = 200; addChild(UI); UI.graphics.beginBitmapFill(bitmapData) UI.graphics.drawTriangles(vertices, indices, uvtData); } ]]> </mx:Script> </mx:Application>参考文章:http://www.senocular.com/flash/tutorials/flash10drawingapi/