flash 绘图API:太极

太极1

前几天想起了一个图案,于是有了一个灵感,把笔记录起来,但是遇到一些问题不能实现到太极图的绘制,请教我大学的同学,他用c++ 绘制一次我看,终于实现了一个太极图的绘制。开始的时候,以下面的图作为绘制,采取几个圆绘制就可以实现到,但是发现填充颜色的时候出现问题,不得不得改变一个思路,同学的讲解之后,原来技巧就是在将大圆变成两边的扇形,从这个得到一个启发,运用扇形绘制得到一半的圆。那么解决到填充图像的问题。关键地方实现到一个扇形。通过Api绘制。但是as3 自带API并没有绘制扇形的方法,经过网上查询资料丰富,顺手牵羊修改了一下。

初始的思路要知道怎样绘制一个扇形:我们简单写了一下,实现到扇形的效果就可以。

view plaincopy to clipboardprint?

  1. function pie(g:Graphics,startAngle:Number,endAngle:Number,radius:Number,color:uint):void
  2.     { 
  3.         g.lineStyle(1); 
  4.         g.moveTo(0,0); 
  5.         g.beginFill(color); 
  6. for (var i:Number=startAngle; i<=endAngle; i++) 
  7.         { 
  8.             var angle:Number = i*Math.PI/180; 
  9.             var pointX:Number=Math.cos(angle)*radius; 
  10.             var pointY:Number=Math.sin(angle)*radius; 
  11.             g.lineTo(pointX, pointY); 
  12.         } 
  13.         g.lineTo(0,0); 
  14.         g.endFill(); 
  15.     } 

扇形1

里面参数有分别图形对象,开始角,结束的角度,半径,颜色填充值。这样就基本能够实现到我们预想到效果。

这种通过描点的方式来实现扇形效果。

实现完成之后,我们继续按下面的图案来描写圆,一共是5个圆,最大的圆是由两个扇形完成,其他即通过绘图api drawCircl 填充。

填充颜色的时候,关键一点是对颜色处理,这样才能实现太极图案。

太极2

太极图行类:

按上面的思路图进行绘制。

view plaincopy to clipboardprint?

  1. package  
  2. //绘制太极
  3.     import flash.display.Sprite; 
  4.     import flash.events.*; 
  5.     import flash.display.Graphics; 
  6.     import flash.geom.Point; 
  7. public class TaiJi extends Sprite 
  8.     { 
  9. private var shape:Sprite=new Sprite(); 
  10. private var contain:Sprite=new Sprite(); 
  11. private var shape2:Sprite=new Sprite(); 
  12. private var shape3:Sprite=new Sprite(); 
  13. private var R:int;//半径
  14. private var startX:Number=0; 
  15. private var startY:Number=0; 
  16. public function TaiJi(R:int) 
  17.         { 
  18. this.R=R;        
  19.             addChild(shape); 
  20.             shape.x=startX; 
  21.             shape.y=startY; 
  22.             addChild(shape2); 
  23.             addChild(shape3); 
  24.             creatSprite(); 
  25.         } 
  26. private function creatSprite():void
  27.         { 
  28.             pie(shape.graphics,90,270,R,0x000000);////绘制扇形左边
  29.             pie(shape.graphics,270,450,R,0xffffff);//绘制扇形右边
  30.             shape2.graphics.beginFill(0xffffff);//绘制下圆
  31.             shape2.graphics.drawCircle(startX,startY+R/2,R/2); 
  32.             shape2.graphics.endFill(); 
  33.             shape2.graphics.beginFill(0x000000);//绘制上圆
  34.             shape2.graphics.drawCircle(startX,startY-R/2,R/2); 
  35.             shape2.graphics.endFill(); 
  36.             shape3.graphics.beginFill(0xffffff); 
  37.             shape3.graphics.drawCircle(startX,startY-R/2,R/4); 
  38.             shape3.graphics.endFill(); 
  39.             shape3.graphics.beginFill(0x000000); 
  40.             shape3.graphics.drawCircle(startX,startY+R/2,R/4); 
  41.             shape3.graphics.endFill(); 
  42.         } 
  43. //绘制扇形
  44. private function pie(g:Graphics,startAngle:Number,endAngle:Number,radius:Number,color:uint):void
  45.         { 
  46.             g.lineStyle(1); 
  47.             g.moveTo(0,0); 
  48.             g.beginFill(color); 
  49. for (var i:Number=startAngle; i<=endAngle; i++) 
  50.             { 
  51.                 var angle:Number = i*Math.PI/180; 
  52.                 var pointX:Number=Math.cos(angle)*radius; 
  53.                 var pointY:Number=Math.sin(angle)*radius; 
  54.                 g.lineTo(pointX, pointY); 
  55.             } 
  56.             g.lineTo(0,0); 
  57.             g.endFill(); 
  58.         } 
  59.     } 

测试代码:代码当中添加一个发光滤镜效果。

view plaincopy to clipboardprint?

  1. package  
  2. //绘制太极
  3.     import flash.display.MovieClip; 
  4.     import flash.events.*; 
  5.     import flash.display.Bitmap; 
  6.     import flash.display.BitmapData; 
  7.     import flash.geom.*; 
  8.     import flash.filters.GlowFilter;//添加一个发光滤镜
  9. public class Main2 extends MovieClip 
  10.     { 
  11. private var R:int=120; 
  12. private var contain:MovieClip=new MovieClip(); 
  13. public function Main2() 
  14.         { 
  15.             creatSprite(); 
  16.         } 
  17. private function creatSprite():void
  18.         { 
  19.             addChild(contain); 
  20.             var sprite:TaiJi=new TaiJi(R);//创建一个太极对象
  21.             contain.addChild(sprite); 
  22.             contain.x=stage.stageWidth/2; 
  23.             contain.y=stage.stageHeight/2; 
  24.             var glow:GlowFilter=new GlowFilter(0xFFFFFF,0.3,60,60,3);//发光滤镜
  25.             var array:Array=new Array(); 
  26.             array.push(glow); 
  27.             contain.filters=array; 
  28.         } 
  29.     } 

为了添加一些效果,我们还可以为其图像添加滤镜效果,导入滤镜包。使用GlowFilter 对其添加滤镜光

var glow:GlowFilter=new GlowFilter(0xFFFFFF,0.3,60,60,3);//发光滤镜
var array:Array=new Array();
array.push(glow);
contain.filters=array;

发光滤镜,这样能够实现到不错的效果。

同样为了添加有趣的意思,我们上网搜索一些手的图片,然后再配合两首诗句的制作,这样看起来更加酷。

第二个版本的效果图。

太极最近

你可能感兴趣的:(Flash)