var sourceData = [0, 15, 25, 10, 20, 8, 23, 30];
var sliceRatio = [];
var sliceAngle = [];
var slice_mc = [];
var graphTitle = "Title of Pie Chart";
var sliceLabel = [" ", "item-A", "item-B", "item-C", "item-D", "item-E", "item-F", "item-G"];
var sliceColor = ["0xffffff", "0x0099cc", "0xcc3366", "0x669900", "0x996699", "0x66cc99", "0xffcc00", "0xff9999"];
var total = 0;
var x0 = y0=200;
var r = 150;
sliceAngle[0] = 0;
title.text = graphTitle;
for (i=1; i<sourceData.length; i++) {
total += sourceData[i];
}
start_btn.onRelease = function() {
for (i=1; i<sourceData.length; i++) {
_root["mark"+i].removeMovieClip();
_root["item"+i].text = "";
}
startAngle = 0;
generateSlice();
};
function generateSlice() {
for (i=1; i<sourceData.length; i++) {
sliceRatio[i] = sourceData[i]/total;
sliceAngle[i] = sliceRatio[i]*360;
slice_mc[i] = createEmptyMovieClip("slice_mc"+i, i);
slice_mc[i].sColor = sliceColor[i];
startAngle += sliceAngle[i-1];
slice_mc[i].d_start = startAngle;
slice_mc[i].d_stop = startAngle+sliceAngle[i];
slice_mc[i].num = i;
createPieChart(slice_mc[i]);
}
}
function createPieChart(mc) {
mc.moveTo(x0,y0);
mc.x = x0;
mc.y = y0;
mc.d = 0;
mc.lineStyle (2, 0xffffff, 100);
mc.beginFill(mc.sColor,100);
mc.onEnterFrame = function() {
this.lineTo(this.x,this.y);
if (this.d>=this.d_start-3 && this.d<=this.d_stop) {
this.x = x0+r*Math.sin(this.d/180*Math.PI);
this.y = y0-r*Math.cos(this.d/180*Math.PI);
itemDisplay(this.num);
}
this.d += 3;
if (this.d>365) {
delete mc.onEnterFrame;
}
};
}
function itemDisplay(i) {
mark_mc = attachMovie("mark", "mark"+i, 20+i);
mark_mc._x = 400;
mark_mc._y = 100+30*(i-1);
colorObject = new Color(mark_mc);
colorObject.setRGB(sliceColor[i]);
itemBox = createTextField("item"+i, 40+i, 440, 90+30*(i-1), 100, 20);
itemBox.text = sliceLabel[i];
} |
各アイテムの数値を配列で定義(注1)
各アイテムの全体に対する比
各アイテムの中心角
各アイテム塗りつぶし用ムービークリップ
グラフの題名
各アイテム名(最初の項はダミー)
塗りつぶしの色(最初の項はダミー)
変数totalの定義
円の中心座標
円の半径
グラフの題名表示
数値のトータルを計算
スタートボタンがリリースされたら
画面のクリヤー
startAngleの初期化
generateSlice関数へ
各項目対応のスライス(円弧)作成関数
スライス(項目データ)の比率計算
スライスの中心角の計算
塗りつぶし用ムービークリップの作成
スライスの色
最上部を0とした、スライスの始まりの角度
各ムービークリップに始まり角を割り付け
終わり(そのスライスの塗りつぶし終了)角度
番号取得
createPieChart関数へ(引数:ムービークリップ)
円グラフ作成関数
線引きの始まり座標を円の中心にセット
移動角速度の初期化
線の色
塗りつぶしの色
(this.x,this.y)まで線を引く(線の色なし、線が動く範囲が塗りつぶされる)
(this.x,this.y)は、各スライスのstart角度から、stop角度まで円周にそって移動する(-3は隙間が開かない様に補正)
そのスライスの番号を引数にitemDisplay関数へ
角度を毎フレーム3度で増加
もし365度移動したらonEnterFrameを削除
(360度にしたら手前でstopするので補正)
凡例作成関数
色表示用ムービークリップ
色設定用オブジェクト
色のセット
項目名表示用テキストフィールド
項目名表示 |