Flash ActionScriptで複雑な傾斜のある楕円を描く | BLOG × R-DESIGN

Flash ActionScriptで複雑な傾斜のある楕円を描く

Flash

Flashは、WEBサイトに複雑な動きを加えることが出来るアニメーションムービーですが、Flash ActionScriptが書けないと複雑な表現はなかなか難しいんです。

例えば、イラストなどのオブジェクトが右から左に動いたりするモーショントゥイーンや、円が四角形に変るシェイプトゥウィーンなどのアニメーションは、最初のコマと最後のコマを結んで上げれば出来ますが、上記のような、半永久的に異なった起動を描く光などはActionScriptに限ります。

また、こうして作ったFlashムービーを見るためのFlash Playerの普及率は非常に高く、大抵のパソコンでFlashムービーを見ることが出来ますが、製作者側はそれを過信して新しいバージョンで制作すると大きな誤算が生まれ、発注した企業の担当者様からこんなクレームを言われてしまいます。

「なんで強豪他社のWEBサイトのFlashは見えて、作ってもらったウチのFlashは見えないんだ!」と…。

実はFlashには、製作側のFlashやActionScript、閲覧側のFlash Playerそれぞれにバージョンが有り、上位バージョンは下位バージョンのムービーは見れますが、その逆では動作しないことが多いのです。
そのため、古いFlash Playerしか入っていないようなセキュリティーの厳しい企業などでは新しいバージョンで制作されたFlashは見ることが出来なくなってしまいます。

今回、当社でお引き受けした案件も、複雑な動きをする光とその軌跡、クライアントは企業というActionScriptを使用しないと実現不可能な、且つ最新バージョンでもダメ(多分?)という案件でした。

そこで、今回はFlash6 + ActionScript2.0で実現する楕円の描き方(覚書)

ステージ上に光のMovieClipを配置し、そこに以下ActionScriptを記述

//----- ActionScript START

onClipEvent (load) {
    center = Stage.width/2;       //楕円の中心座標X軸
    vartical = Stage.height/2;    //楕円の中心座標Y軸
    r_long = 150;                 //長軸
    r_short = 50;                 //短軸
    degree = 0;                   //傾斜度(初期値:45)
}

onClipEvent (enterFrame) {
    slope = Math.PI/180*(degree); //楕円の傾斜角度をラジアンに変換
    sin_slope = Math.sin(slope);  //傾斜用のサイン
    cos_slope = Math.cos(slope);  //傾斜用のコサイン
    ang += 2.5;                   //移動速度を追加(基本値:10)

    /*
    原点中心に角θだけ回転させる変換式
     傾斜用x'=xcosθ-ysinθ  傾斜用y'=xsinθ+ycosθ
    ▼θ=45度にする場合
     傾斜用新x=x(cos(radian)×長軸)×cos(45)-y(sin(radian)×短軸)×sin(45)
     傾斜用新y=x(cos(radian)×長軸)×sin(45)+y(sin(radian)×短軸)×cos(45)
    */


    //角度angをラジアンに変換(360度=2PI,180度=PI,90度=PI/2,1度=PI/180)
    radian = Math.PI/180*ang;

    x1 = Math.cos(radian)*r_long; //傾斜前のx座標→コサイン × 長軸
    y1 = Math.sin(radian)*r_short;//傾斜前のy座標→サイン × 短軸

    //傾斜用新x = 現在のxの長さ×cos(45度)- 現在のyの長さ×sin(45度)
    newx = (x1*cos_slope)-(y1*sin_slope);
    //傾斜用新y = 現在のxの長さ×sin(45度)+ 現在のyの長さ×cos(45度)
    newy = (x1*sin_slope)+(y1*cos_slope);

    this._x = newx+center;
    this._y = newy+vartical;
    degree += 0.9;               //回転角度を追加
}
//----- ActionScript END


最初の初期設定の「degree値」に数値を入力し、最後の「degree += 0.9;」をコメントアウトすれば、単に初期設定の「degree値」だけ傾斜した普通の楕円だけの動きになります。

栗原@R-design