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
// increment our angle
angle += theta;
angleMid = angle-(theta/2);
bx = ax+
Math.
cos(angle)*radius;
by = ay+
Math.
sin(angle)*yRadius;
cx = ax+
Math.
cos(angleMid)*(radius/
Math.
cos(theta/2));
cy = ay+
Math.
sin(angleMid)*(yRadius/
Math.
cos(theta/2));
curveTo(cx, cy, bx, by);
}
}
return {x:bx, y:by};
}
function drawBurst(x:
Number, y:
Number, sides:
Number, innerRadius:
Number, outerRadius:
Number, angle:
Number)
{
if(arguments<5)
{
return;
}
if (sides>2)
{
var step:
Number, halfStep:
Number, qtrStep:
Number,
start:
Number, n:
Number;
var dx:
Number, dy:
Number, cx:
Number, cy:
Number;
step = (
Math.
PI*2)/sides;
halfStep = step/2;
qtrStep = step/4;
start = (angle/180)*
Math.
PI;
moveTo(x+(
Math.
cos(
start)*outerRadius), y-(
Math.
sin(
start)*outerRadius));
for (n=1; n<=sides; n++)
{
cx = x+
Math.
cos(
start+(step*n)-(qtrStep*3))*(innerRadius/
Math.
cos(qtrStep));
cy = y-
Math.
sin(
start+(step*n)-(qtrStep*3))*(innerRadius/
Math.
cos(qtrStep));
dx = x+
Math.
cos(
start+(step*n)-halfStep)*innerRadius;
dy = y-
Math.
sin(
start+(step*n)-halfStep)*innerRadius;
curveTo(cx, cy, dx, dy);
cx = x+
Math.
cos(
start+(step*n)-qtrStep)*(innerRadius/
Math.
cos(qtrStep));
cy = y-
Math.
sin(
start+(step*n)-qtrStep)*(innerRadius/
Math.
cos(qtrStep));
dx = x+
Math.
cos(
start+(step*n))*outerRadius;
dy = y-
Math.
sin(
start+(step*n))*outerRadius;
curveTo(cx, cy, dx, dy);
}
}
};
function drawPoly (x:
Number, y:
Number, sides:
Number, radius:
Number, angle:
Number)
{
if (arguments.
length<4)
{
return;
}
var count:
Number =
Math.
abs(sides);
if (count>2)
{
var step:
Number,
start:
Number, n:
Number, dx:
Number, dy:
Number;
step = (
Math.
PI*2)/sides;
start = (angle/180)*
Math.
PI;
moveTo(x+(
Math.
cos(
start)*radius), y-(
Math.
sin(
start)*radius));
for (n=1; n<=count; n++)
{
dx = x+
Math.
cos(
start+(step*n))*radius;
dy = y-
Math.
sin(
start+(step*n))*radius;
lineTo(dx, dy);
}
}
}
function drawWedge(x:
Number, y:
Number, startAngle:
Number, arc:
Number, radius:
Number, yRadius:
Number)
{
if (arguments.
length<5)
{
return;
}
moveTo(x, y);
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;
if (segs>0)
{
ax = x+
Math.
cos(startAngle/180*
Math.
PI)*radius;
ay = y+
Math.
sin(-startAngle/180*
Math.
PI)*yRadius;
lineTo(ax, ay);
for (
var i = 0; i
Math.
cos(angle)*radius;
by = y+
Math.
sin(angle)*yRadius;
cx = x+
Math.
cos(angleMid)*(radius/
Math.
cos(theta/2));
cy = y+
Math.
sin(angleMid)*(yRadius/
Math.
cos(theta/2));
curveTo(cx, cy, bx, by);
}
lineTo(x, y);
}
}
}
在riacn看到一个转的国外人写的Graphic类,感觉不是很好。 首选它是从MovieClip类继承下来的,但它却
又用_root这个根时间轴来创建一个MovieClip的实例mc来mix-in到Graphic中。这样做是很不对的!并且一系列的
MovieClip的方法要通过mc来重写实现!我几个月前写的这个类虽然不是很充分,因为这是我组件库所有View的基类,
很多方法在考虑中,但绝对继承了MovieClip的所有方法和属性,而且跟MovieClip类一样是dynamic的.比起国外那
个,这个更有科学性.