【AS3】三角関数を使った円運動
今更感がすごいありますが、あいまいだったので記事にします。
AS3で三角関数を使うとモーションの表現力が大きく広がります。
実際はフラッシュ側でMath.sin(),Math.cos(),Math.PI()といったメソッドが用意されていますので、
それらを使いコードを記述することで簡単に実装可能です。
とりあえず以下のようなサンプルを作ってみました。
以下の部分でラジアンを算出しています。
e.currentTarget.x = stage.stageWidth / 2 + hankei * Math.cos(angle * Math.PI * 2); e.currentTarget.y = stage.stageHeight / 2 + hankei * Math.sin(angle * Math.PI * 2);
ちょっとごちゃごちゃしてますのでわかりやすくすると
x = 円の中心の座標 + 円の半径 (radius) × cos(角度)
y = 円の中心の座標 + 円の半径 (radius) × sin(角度)
こんな感じでラジアンを算出しています。
度数を使いたい場合は以下のようにします。
var dx = Math.cos(angle * Math.PI * 2) * Math.PI / 180; var dy = Math.sin(angle * Math.PI * 2) * Math.PI / 180; line_mc.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
ソース全文
package{
import flash.display.MovieClip;
import flash.events.Event;
public class Main2 extends MovieClip{
private var angle:Number = 0;
private var hankei:Number = 100;
public function Main2() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void {
var mc:Ball= new Ball();
addChild(mc);
mc.x = stage.stageWidth / 2;
mc.y = stage.stageHeight / 2;
mc.addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void {
angle += 0.006;
e.currentTarget.x = stage.stageWidth/2 + hankei * Math.cos(angle * Math.PI * 2);
e.currentTarget.y = stage.stageHeight / 2 + hankei * Math.sin(angle * Math.PI * 2);
var dx = Math.cos(angle * Math.PI * 2) * Math.PI / 180;
var dy = Math.sin(angle * Math.PI * 2) * Math.PI / 180;
line_mc.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
}
}
}
トラックバック(0)
このブログ記事を参照しているブログ一覧: 【AS3】三角関数を使った円運動
このブログ記事に対するトラックバックURL: http://alwaysfinetuning.com/mt/mt-tb.cgi/103
