2009 年 8 月 18 日
AS3 円運動のクラス
円運動をさせる場合、軸をずらしたmcを作りrotationを変更していたのですが
やはり基礎的なところなので作っておきました。
CircleMove.as
package { import flash.display.Sprite; import flash.events.Event; public class CircleMove { var my_sprite:Sprite; var my_radius:uint var my_speed:uint; var degree:uint=0; var centerX=0; var centerY=0; var speed:uint; function CircleMove(sprite:Sprite,radius,speed) { my_sprite=sprite; my_radius=radius; my_speed=speed; centerX=my_sprite.x centerY=my_sprite.y my_sprite.addEventListener(Event.ENTER_FRAME,move); } function move(event) { var radian = Math.PI/180*degree; my_sprite.x=centerX+my_radius*Math.cos(radian); my_sprite.y=centerY+my_radius*Math.sin(radian); degree+=my_speed; } } }
flaファイルは
import CircleMove; var cm=new CircleMove(ball,100,5);
さらに、JSONで渡したかったので継承したクラスを作成しました。
こんなこと普通しなそう・・・
CircleMove2.as
package { public class CircleMove2 extends CircleMove { function CircleMove2(obj:Object) { my_sprite=obj.sprite; my_radius=obj.radius; my_speed=obj.speed; super(my_sprite,my_radius,my_speed); } } }
この場合のflaファイルは
import CircleMove2; var cm=new CircleMove2({sprite: ball,radius:100,speed:5});
さらに、回転開始のオフセットを設定できるようにしました。
CircleMove3.as
package { public class CircleMove3 extends CircleMove2 { function CircleMove3(obj:Object) { degree=obj.degree; super(obj); } } }
この場合のサンプルflaファイルは
import CircleMove3; //リンゲージしたクラスBALL var ball2=new BALL(); var ball3=new BALL(); prepare(ball2); prepare(ball3); //準備用の関数 function prepare(mc:MovieClip){ mc.x=stage.stageWidth/2; mc.y=stage.stageHeight/2; addChild(mc); } var cm2=new CircleMove2({sprite:ball2,radius:100,speed:5}); var cm3=new CircleMove3({sprite:ball3,radius:100,speed:5,degree:180});//180度から開始
となりました。