制作完成,初步的太阳花图案已经完成。采用编程的方式就可以调用出这个图案出来。 // 该类为太阳花图案绘制 //vesion 1.0 //author 夏天的树人 package org.summerTree.graphics { import flash.geom.Point; public class SunFlower extends Base { private var LineColor:uint=0x000000;//默认是黑色 public function SunFlower() { } public function clone():SunFlower { return new SunFlower(); } //创建太阳花 /*@ *@ *@ *@ *@ */ public function CreatSunFlower(radius:Number,n:Number=10,fillColor:Number=0xFFFF00,alpha:Number=1):void { if(n<=0) return; this.graphics.lineStyle(1,color); this.graphics.drawCircle(0,0,radius); var angle:Number=2*Math.PI/n; var Length:Number=getLength(radius,angle); trace(Length) for(var i:int=0;i<n;i++) { var point:Point=Point.polar(radius,i*angle); this.graphics.beginFill(fillColor,alpha); this.graphics.drawCircle(point.x,point.y,Length); this.graphics.endFill(); } this.graphics.beginFill(0xffffff,1); this.graphics.drawCircle(0,0,radius); this.graphics.endFill(); CreatFace(radius); CreatBody(radius); } //计算出两个圆的连线长度,即计算出单个圆的半径 private function getLength(radius:Number,angle:Number):Number { var Length:Number; Length=2*radius*radius-2*radius*radius*Math.cos(angle); return Math.sqrt(Length)/2; } //创建表情 private function CreatFace(radius:Number):void { this.graphics.beginFill(0x000000,1); this.graphics.drawCircle(radius/3,-radius/8,radius*0.05); this.graphics.endFill(); this.graphics.beginFill(0x000000,1); this.graphics.drawCircle(-radius/3,-radius/8,radius*0.05); this.graphics.endFill(); this.graphics.moveTo(radius/2,-radius/5); this.graphics.lineTo(radius/8,-radius/5); this.graphics.moveTo(-radius/2,-radius/5); this.graphics.lineTo(-radius/8,-radius/5); //嘴巴 this.graphics.moveTo(-radius/3,radius/2); this.graphics.lineTo(radius/3,radius/2); } //创建身体 private function CreatBody(radius:Number):void { //创建身体 this.graphics.moveTo(0,radius); this.graphics.lineTo(0,3*radius); //创建手 this.graphics.moveTo(0,1.5*radius); this.graphics.lineTo(-radius*0.8,1.8*radius); this.graphics.drawCircle(-radius,1.9*radius,radius/5); this.graphics.moveTo(0,1.5*radius); this.graphics.lineTo(radius*0.8,1.8*radius); this.graphics.drawCircle(radius,1.9*radius,radius/5); //创建脚 this.graphics.moveTo(0,3*radius); this.graphics.lineTo(-0.5*radius,3.5*radius); this.graphics.lineTo(-0.5*radius,4*radius); this.graphics.lineTo(-radius,4*radius); this.graphics.moveTo(0,3*radius); this.graphics.lineTo(0.5*radius,3.5*radius); this.graphics.lineTo(0.5*radius,4*radius); this.graphics.lineTo(radius,4*radius); //this.graphics.moveTo(-radius,3*radius); //this.graphics.moveTo(radius,3*radius); } //设置颜色 public function set color(value:uint):void { this.LineColor=value; } //获取颜色 public function get color():uint { return this.LineColor; } //清除图像 public function clear():void { this.graphics.clear(); } } } 大概用法很简单 初步用法 //创建太阳花图案 var flower:SunFlower=new SunFlower(); flower.CreatSunFlower(30,10); flower.move(260,100); addChild(flower); //图形的基础类 //author 夏天的树人 //vesion 1.0 package org.summerTree.graphics { import flash.display.Sprite; public class Base extends Sprite { private var LineColor:uint=0x000000;//默认是黑色 public function Base() { } //设置坐标 public function move(x:Number,y:Number):void { this.x=x; this.y=y; } //设置颜色 public function set color(value:uint):void { this.LineColor=value; } //获取颜色 public function get color():uint { return this.LineColor; } } } 当中Base 类 继承了Sprite类,作为Sprite的一个子类,同时扩展了一个move(x,y)的办法,用于书写坐标的时候使用的。这个方法也是比较喜欢的一种办法。 我们采用描点和描线办法制造。 这个做法比较笨拙一点,采用覆盖多余线条的地方 ,虽然实现了图案,但是有多余的线条在这里面。并不是最优的方法。 不过创作起来也多一种路径实现。 可以在到我那个闪盘进行下载。