绘图与遮罩整理

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   }
posted @ 2012-07-12 18:05  9筒  阅读(288)  评论(0编辑  收藏  举报