import flash.display.MovieClip;
import flash.text.TextFormat;
import flash.geom.Matrix;
import flash.events.Event;
//円盤に表示する文字列
var string="東日本大震災被災者の皆様に心よりお見舞い申し上げます 広島市西区己斐 PC楽舎";
//文字数
var num:Number=string.length;
//文字のフォーマット
var fm = new TextFormat();
fm.color=0x330066;
fm.size=24;
var charSize=fm.size*4/3;//pix=point*4/3
//円盤の中心をステージ中心に
var cx=stage.stageWidth/2;
var cy=stage.stageHeight/2;
//円盤の大きさ
var discSize:Number = 200;
//円盤のx軸(y軸)中心の回転角
var drx:Number=0;
var dry:Number=0;
//文字列収納ムービークリップ
var container = new MovieClip();
addChild(container);
container.x=cx;
container.y=cy;
//外、内の円盤を描く関数への参照
drawCircle(discSize+charSize/2,0x66ffff);
drawCircle(discSize-charSize,0x330066);
//円盤のマウス位置に反応した動き
container.addEventListener(Event.ENTER_FRAME,discSwing);
function discSwing(event:Event):void {
drx += ((cx - mouseX)/3-drx)/100;
dry += ((cy - mouseY)/3-dry)/100;
container.rotationY = - drx;
container.rotationX = dry;
}
//文字列の配置
for (var i:uint=0; i<num; i++) {
var char_mc:MovieClip = new str();
container.addChild(char_mc);
char_mc.name="mc"+i;
char_mc.tf.text=string.charAt(i);
char_mc.tf.setTextFormat(fm);
char_mc.rd=Math.PI/2-i*Math.atan(charSize/discSize);
drawLine(char_mc);
char_mc.addEventListener(Event.ENTER_FRAME,charRot);
}
//文字列の回転運動
function charRot(event:Event):void {
var mc:MovieClip=event.target as MovieClip;
var myMatrix:Matrix = new Matrix();
myMatrix.rotate(mc.rd-Math.PI/2);
mc.transform.matrix=myMatrix;
mc.x=discSize*Math.cos(mc.rd);
mc.y=discSize*Math.sin(mc.rd);
mc.rd+=0.03;
}
//中心から各文字へ線を引く関数
function drawLine(mc):void {
var l_mc = new Shape();
var gr=l_mc.graphics;
gr.lineStyle(1, 0xdddddd, 0.3);
gr.moveTo(0,-charSize);
gr.lineTo(-discSize*Math.cos(Math.PI/2),-discSize*Math.sin(Math.PI/2));
mc.addChild(l_mc);
}
//円盤を描く関数
function drawCircle(r,color):void {
var c_mc = new Shape();
var grc=c_mc.graphics;
grc.lineStyle(2,0xffffff,1.0);
grc.beginFill(color,0.6);
grc.drawCircle(0,0,r);
container.addChild(c_mc);
}
|