dynamic class com.flashvan.Graphic extends MovieClip
{
static var symbolName:String = "__Packages.com.flashvan.Graphic";
static var symbolOwner:Function = com.flashvan.Graphic;
static var symbolLinked = Object.registerClass(symbolName, symbolOwner);
function Graphic()
{
}
static function create(base_mc:MovieClip, name:String, depth:Number,o:Object)
{
var mc = base_mc.attachMovie(symbolName, name, depth,o);
return mc;
}
function drawRect(x1:Number, y1:Number, x2:Number, y2:Number):Void
{
moveTo(x1,y1);
lineTo(x2,y1);
lineTo(x2,y2);
lineTo(x1,y2);
lineTo(x1,y1);
}
function drawLine(x1:Number, y1:Number, x2:Number, y2:Number):Void
{
}
function fillRect(x:Number, y:Number, width:Number, height:Number):Void
{
}
function drawRoundRect(x:Number,y:Number,w:Number,h:Number,r,c,alpha,rot,gradient:String,ratios)
{
if (typeof r == "object") {
var rbr = r.br var rbl = r.bl var rtl = r.tl var rtr = r.tr }
else
{
var rbr = rbl = rtl = rtr = r;
}
if(typeof c == "object")
{
if (typeof alpha != "object")
var alphas = [alpha,alpha];
else
var alphas = alpha;
if (ratios == undefined)
var ratios = [ 0, 0xff ];
var sh = h *.7
if (typeof rot != "object")
var matrix = {matrixType:"box", x:-sh, y:sh, w:w*2, h:h*4, r:rot * 0.0174532925199433 }
else
var matrix = rot;
if (gradient == "radial")
beginGradientFill( "radial", c, alphas, ratios, matrix );
else
beginGradientFill( "linear", c, alphas, ratios, matrix );
}
else if (c != undefined)
{
beginFill (c, alpha);
}
r = rbr;
var a = r - (r*0.707106781186547); var s = r - (r*0.414213562373095); moveTo ( x+w,y+h-r);
lineTo ( x+w,y+h-r );
curveTo( x+w,y+h-s,x+w-a,y+h-a);
curveTo( x+w-s,y+h,x+w-r,y+h);
r = rbl;
var a = r - (r*0.707106781186547);
var s = r - (r*0.414213562373095);
lineTo ( x+r,y+h );
curveTo( x+s,y+h,x+a,y+h-a);
curveTo( x,y+h-s,x,y+h-r);
r = rtl;
var a = r - (r*0.707106781186547);
var s = r - (r*0.414213562373095);
lineTo ( x,y+r );
curveTo( x,y+s,x+a,y+a);
curveTo( x+s,y,x+r,y);
r = rtr;
var a = r - (r*0.707106781186547);
var s = r - (r*0.414213562373095);
lineTo ( x+w-r,y );
curveTo( x+w-s,y,x+w-a,y+a);
curveTo( x+w,y+s,x+w,y+r);
lineTo ( x+w,y+h-r );
if (c != undefined)
endFill();
}
function drawOval(x:Number, y:Number, radius:Number, yRadius:Number):Void
{
if (arguments.length<3)
{
return;
}
var theta:Number, xrCtrl:Number, yrCtrl:Number, angle:Number, angleMid:Number;
var px:Number, py:Number, cx:Number, cy:Number;
if (yRadius == undefined)
{
yRadius = radius;
}
theta = Math.PI/4;
xrCtrl = radius/Math.cos(theta/2);
yrCtrl = yRadius/Math.cos(theta/2);
angle = 0;
moveTo(x+radius, y);
for (var i = 0; i<8; i++)
{
angle += theta;
angleMid = angle-(theta/2);
cx = x+Math.cos(angleMid)*xrCtrl;
cy = y+Math.sin(angleMid)*yrCtrl;
px = x+Math.cos(angle)*radius;
py = y+Math.sin(angle)*yRadius;
curveTo(cx, cy, px, py);
}
}
function drawArc(x:Number, y:Number, radius:Number, arc:Number, startAngle:Number, yRadius:Number)
{
if (arguments.length<5)
{
return;
}
if (yRadius == undefined)
{
yRadius = radius;
}
var segAngle:Number, theta:Number, angle:Number, angleMid:Number, segs:Number;
var ax:Number, ay:Number, bx:Number, by:Number, cx:Number, cy:Number;
if (Math.abs(arc)>360)
{
arc = 360;
}
segs = Math.ceil(Math.abs(arc)/45);
segAngle = arc/segs;
theta = -(segAngle/180)*Math.PI;
angle = -(startAngle/180)*Math.PI;
ax = x-Math.cos(angle)*radius;
ay = y-Math.sin(angle)*yRadius;
if (segs>0)
{
for (var i = 0; i 在riacn看到一个转的国外人写的Graphic类,感觉不是很好。 首选它是从MovieClip类继承下来的,但它却 又用_root这个根时间轴来创建一个MovieClip的实例mc来mix-in到Graphic中。这样做是很不对的!并且一系列的 MovieClip的方法要通过mc来重写实现!我几个月前写的这个类虽然不是很充分,因为这是我组件库所有View的基类, 很多方法在考虑中,但绝对继承了MovieClip的所有方法和属性,而且跟MovieClip类一样是dynamic的.比起国外那 个,这个更有科学性. 
|