flashで円の描画。
長文失礼します。
FLASH,CS3でActionScript2.0で作業しています。
FLASHで複数の円を重ねて円グラフの様な描画をしたくて、ネット上にあったソースを自分で少しいじりました。
しかし複数の円を描画しようとすると他の円が消えてしまいます。
外部に円を描画するスクリプト(DrawArc.as)がおいてあります。
//DrawArc.as
class DrawArc {
var mc:MovieClip;
function DrawArc(target:MovieClip) {
mc = target;
}
function drawLine(x:Number, y:Number, radius:Number, arc:Number, startAngle:Number, thickness:Number, color:Number, alpha:Number, yRadius:Number) {
mc.clear();
mc.lineStyle(thickness,color,alpha,false,"none","none");
mc.moveTo(x,y);
if (arguments.length<8) {
return;
}
if (yRadius == undefined) {
yRadius = radius;
}
if (Math.abs(arc)>360) {
arc = 360;
}
var segs = Math.ceil(Math.abs(arc)/45);
var segAngle = arc/segs;
var theta = -(segAngle/180)*Math.PI;
var angle = -(startAngle/180)*Math.PI;
var ax = x-Math.cos(angle)*radius;
var ay = y-Math.sin(angle)*yRadius;
if (segs>0) {
for (var i = 0; i<segs; i++) {
angle += theta;
var angleMid = angle-(theta/2);
var bx = ax+Math.cos(angle)*radius;
var by = ay+Math.sin(angle)*yRadius;
var cx = ax+Math.cos(angleMid)*(radius/Math.cos(theta/2));
var cy = ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
mc.curveTo(cx,cy,bx,by);
}
}
}
}
そしてFLASHのフレーム内に
import DrawArc;
mc = new DrawArc(this);
targetNum = 0;
onEnterFrame = function () {
if (targetNum<=220) {
targetNum += 2;
change();
} else {
delete this.onEnterFrame;
}
};
function change() {
mc.drawLine(Stage.width/2,65,40,-targetNum,90,30,0x69f203,100);
}
とかいてあります。
これで円を描画してくれるんですが、
さらにもう一つの円を重ねて表示させたいので
FLASHのフレーム内に
import DrawArc;
mc = new DrawArc(this);
mc2 = new DrawArc(this);//新しい用
targetNum = 0;
targetNum2 = 0;//新しい用
onEnterFrame = function () {
if (targetNum<=220) {
targetNum += 2;
change();
}
if (targetNum2<=210) {
targetNum2 += 2;
change2();
}
};
function change() {
mc.drawLine(Stage.width/2,65,40,-targetNum,90,30,0x002503,100);
mc.mc.swapDepths(10);
trace(mc.mc.getDepth());
}
function change2() {
mc2.drawLine(Stage.width/2,65,40,-targetNum2,90,30,0x69f203,100);
mc2.mc.swapDepths(11);
trace(mc2.mc.getDepth());
}
と書いたのですがDepthが両方とも10になってしまいます。このDepthが別々になれば両方ちゃんと表示されると思うのですが、手詰まりになってしまいました。
どなたか解決策が分かる方教えてください。
補足
ご回答ありがとうございます。 要は、1周した後にラジアンの値が また「0」から始まるように「2*Math.PI」の剰余算をしている。 そしてcos(ラジアン)の値は、一回転するうちに「-1~1」の間で数値が変わるわけだから、 それに100を掛けてあげれば、_xscaleの値としてムービークリップの反転に使える。 ということですか?? う~~ん、なんか微妙に頭が混乱気味・・・(笑) すいませんが、このどアホな自分にその辺のご教授をお願い致します。