円のアニメーション
サンプルの010301をforkして、円が回転しながら外へ逃げていくアニメーションを作成する。円の位置(x,y)の指定に戸惑った。単純に、振幅を除いて考えると(x,y)=(cos(t), sin(t))で回転運動させている。
変数の定義があまりきれいでないソースコード。
package { import flash.display.*; import flash.events.Event; [SWF(frameRate="30", width="465", height="465")] public class MyFirstAnimation extends Sprite { private var _circle:Circle; public function MyFirstAnimation() { _circle = new Circle(10); _circle.alpha = 1; _circle.t = 0; _circle.r = 0; _circle.dt = 0.2; //回転角の変化率 _circle.dr = 0.1; //振幅の変化率 _circle.x = 465 / 2; _circle.y = 465 / 2; addChild(_circle); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { _circle.move(); } } } import flash.display.Sprite; class Circle extends Sprite { public var dt:Number; public var dr:Number; public var t:Number; public var r:Number; public var radius:Number; public function Circle(_radius:Number, _fillColor:uint = 0x1234FF) { graphics.beginFill(_fillColor); graphics.drawCircle(0, 0, _radius); graphics.endFill(); radius = _radius } public function move():void { t += dt; r += dr; x += r*Math.cos(2*t); y += r*Math.sin(2*t); } }
描画結果。
結果のスクリーンショットをキャプチャしても、円が一つ写るだけだな。http://d.hatena.ne.jp/Gimite/20080114/1200313343のコンバータを使わせていただき貼り付けた。
円の軌跡が残るようにしたいのだが、それをどうやるかは今後の課題。