绘图与遮罩整理
a)shape,button,sprite,movieclip都有graphics属性,即Graphics类实例的引用,要画出特别的有个Pen类Grahphics类的代理包装类
pen类要以Graphics对象引用为参数 var p:Pen = new Pen(sprite.graphics);
eg:
1 var p : Pen = new Pen(graphics); 2 p.lineStyle(5, 0xfd0000); 3 p.drawEllipse(100, 120, 30, 50);
b)绘画之前没有设置lineStyle(),则线条样式为undefined且线条和填充都不能被渲染!
sprite.graphics.lineStyle(thickness,color,alpha,pixelHinting,scaleMode,caps,joints,miterLimit);
c)渐变样式线条:Graphics.lineGradientStyle();先设置基本线条样式,所需的参数和beginGradientFill()一样
d)曲线graphics.curveTo(contrlX,contrlY,mudeX,mudeY);
e)画扇形pen.drawArc(x,y,radius,arc,starAngle,radialLines);arc:扇形度数,radialLines:是否画出扇形两端点到中心的直线,默认false
f)规则图形:矩形Graphics.drawRect(x,y,w,h),圆角矩形Graphics.drawRoundRect(x,y,w,h,r);指定圆角半径Graphics.drawRoundRectComplex(xywh,1,2,3,4);
圆形:Graphics.Circle(x,y,r);可用beginFill(), beginGradientFill(), 或beginBitmapFill() 填充圆
椭圆:graphics.drawEllipse(x, y, width, height);三角形:pen.drawTriangle(x,y,ab,ac,angle);graphics.drawTriangles(vertices)???
规则多边形:pen.drawRegularPolygon(x,y,sides,length,rotation),星形:pen.drawStar(x,y,points,innerRadius,outerRadius,rotation);
g)填充:beginFill(color,alphas);
beginGradientFill(gradientType,colorsArr,alphasArr,ratios,matrix);
gradientType:常量LINEAR(线性)或RADIAL(放射).ratios:根据颜色和透明度指定最后的纯度,范围为0到255。
matrix:flash.geom.Matrix 对象定义用于渐变的转换。默认为1x1的渐变转换来填充图形。Matrix类定义
了createGradientBox()方法,它接受以下参数:scaleX,scaleY,tx,ty,rotation,spreadMethod,interpolationMethod,focalPointRatio.
(1水平缩放比,2垂直缩放比,3旋转角度可转换为弧度公式为Math.PI/180,4X方向的转换数量,6flash.display.SpreadMethod 类常量,有PAD,REFLECT,和REPEAT。默认为 PAD,7flash.display.InterpolationMethod类常量,有LINEAR_RGB和RGB。默认为RGB。插补方法影响颜色渐变,8改值范围从-1 到1指示渐变的焦点(对线形渐变无效)默 认为0,也就是位于中点,)
beginBitmapFill(bitmap,matrix,repeat,smooth);bitmap:填充用的bitmapdata对象。repeat:指定是否平铺位图,默认true。smooth:对位图平滑处理默认false。
matrix:默认下不需要应用转换,也可指定flash.geom.Matrix对象进行位图的缩放,旋转,倾斜,透明等变换。
1 eg://渐变填充 2 1 private function gradientFun() : void { 3 2 var matrix : Matrix = new Matrix(); 4 3 matrix.createGradientBox(100, 100, 0, 50, 50); 5 4 var colors : Array = [0xFF0000, 0x00ff00]; 6 5 var alphas : Array = [100, 100]; 7 6 var ratios : Array = [0x00, 0xFF]; 8 7 graphics.lineStyle(); 9 8 graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix); 10 9 graphics.drawCircle(100, 100, 50); 11 10 graphics.endFill(); 12 11 }
//位图填充 13 package { 14 import flash.display.Sprite; 15 import flash.geom.Matrix; 16 import flash.display.Loader; 17 import flash.net.URLRequest; 18 import flash.display.BitmapData; 19 import flash.events.Event; 20 21 public class BitmapDraw extends Sprite { 22 private var _loader : Loader; 23 public function BitmapDraw() { 24 _loader = new Loader(); 25 _loader.load(new URLRequest("http://imgsrc.baidu.com/forum/pic/item/1f178a82b9014a9033d04c2da9773912b21beeb0.jpg"));
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoad); 26 } 28 private function onImageLoad(event : Event) : void { 29 var bitmap : BitmapData = new BitmapData(_loader.width, _loader.height); 30 bitmap.draw(_loader, new Matrix()); 31 var matrix : Matrix = new Matrix(); 32 matrix.scale(.1, .1); 33 var sampleSprite : Sprite = new Sprite(); 34 sampleSprite.graphics.lineStyle(); 35 sampleSprite.graphics.beginBitmapFill(bitmap, matrix); 36 sampleSprite.graphics.drawCircle(100, 100, 100); 37 sampleSprite.graphics.endFill(); 38 addChild(sampleSprite); 39 } 40 } 41 }
h)遮罩mask:任何可视化对象都可以作为人一对象的mask。
虽然遮罩即使不添加到显示列表也能正常工作,不过还是建议你添加到显示列表。
调用显示对象被指定的 mask 对象遮罩。 要确保当舞台缩放时蒙版仍然有效,mask 显示对象必须处于显示列表的活动部分。 但不绘制 mask 对象本身。 将 mask 设置为 null 可删除蒙版。
要能够缩放遮罩对象,它必须在显示列表中。 要能够拖动蒙版 Sprite 对象(通过调用其 startDrag() 方法),它必须在显示列表中。 要为基于 sprite 正在调度的 mouseDown 事件调用 startDrag() 方法,请将 sprite 的 buttonMode 属性设置为 true。
注意:单个 mask 对象不能用于遮罩多个执行调用的显示对象。在将 mask 分配给第二个显示对象时,会撤消其作为第一个对象的遮罩,该对象的 mask 属性将变为 null。
1 private function testMask() : void { 2 var maskSprite : Sprite = new Sprite(); 3 var pen : Pen = new Pen(maskSprite.graphics); 4 pen.beginFill(0xFFFFFF); 5 pen.drawArc(100, 100, 50, 80, 20, true); 6 pen.endFill(); 7 var maskedSprite : Sprite = new Sprite(); 8 maskedSprite.graphics.lineStyle(); 9 maskedSprite.graphics.beginFill(0xFF0000); 10 maskedSprite.graphics.drawRect(0, 0, 200, 200); 11 maskedSprite.graphics.endFill(); 12 maskedSprite.mask = maskSprite; 13 addChild(maskedSprite); 14 addChild(maskSprite); 15 }