前几天做了一个虚线画图形的类,实现了Flash自带的所有绘图方法,不过在图形很小时,会出现一些BUG,等过些时间修复了再传上来。
就现在而言,最难实现的应该是圆角矩形,或者说是椭圆。
这几天又研究了一下,想用一个稍微简单点的公式实现(用角度递增,以前是用贝塞尔曲线做的线段等比递增),先贴上来。角度递增在椭圆的时候会出现线段不等长。但当长短轴相同,也就是圆的时候,还是可以凑合用的…需要的朋友可以照下面的代码研究一下,算法很简单。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
public function init():void
{
var UI:UIComponent = new UIComponent();
var centerX:Number = 200, centerY:Number = 200;
var radiusX:Number = 100, radiusY:Number = 150;
var positionX:Number, positionY:Number;
var angle:Number = 0;
var change:Boolean = true;
var solidAdjust:int = 80;
var spaceAdjust:int = 100;
addChild(UI);
UI.graphics.lineStyle(1);
UI.graphics.moveTo(centerX+radiusX, centerY);
for (angle; angle <= 2.1*Math.PI;angle ){
positionX = centerX + Math.cos(angle) * radiusX;
positionY = centerY + Math.sin(angle) * radiusY;
if(change){
UI.graphics.lineTo(positionX, positionY);
angle += Math.PI / solidAdjust;
}else{
UI.graphics.moveTo(positionX, positionY);
angle += Math.PI / spaceAdjust;
}
change = !change;
}
}
]]>
</mx:Script>
</mx:Application>