超Flash Lite入門 ActionScript編 その5 揺れ運動

最近、予告エントリーになってしまって申し訳ないです....。

一般的には、上下の揺れ運動は、SinかCosを使うのですが、Math.Sin Cosは精度が悪いのと非公式サポートであるため、簡単かつ高速に実現する方法について書きます。

まずは、以下のKAYACさんの記事をご覧ください。

こちらは円運動をsin、cosを使用しないで実現する方法ですが、逆を言えばこの円運動からsin、cosにあたるものを分離できるはずです。

以下は、上下にムービークリップを振動させるサンプルです。物体が浮遊しているイメージを出す時によく使います。

フレーム1

K=0.16;
sx=2;
sy=2;

sxとsyは基本的に同じ値を入れます。値が大きくなると揺れの縦幅が大きくなります。Kは分割の大きさになります。値が大きい程、周期が短くなります。

フレーム2

sx-=sy*K
sy+=sx*K
_y+=(sx+0.025); //Flash Liteの小数点バグ対策

フレーム3

call(       _currentframe-1);
gotoAndPlay(_currentframe-1);

以下解説です。
sx=sin成分、syがcos成分と見ることができますが、両者ともどの位置から始まるかが違うだけですので、どちらか好きな方を使います。今回はsxのみを使用してy座標に+しています。sin、cosは一定周期の繰り返しなので、どちらかの方向に寄っていってしまうことはないはずなのですが、Flash Liteの小数点バグで、どちらかにずれていってしまうことがあるので、適宜補整値を加えて修正します。尚、syは直接的には使用していませんがsxの計算に必要になります。