|
上記604の楕円の場合は、回転角度だけでなく回転半径も刻々変化するので、上記の方法では少しむつかしそうです。
 |
そこで、座標の原点を中心とする円周上のムービークリップの座標を、その回転角度と半径から求める式を使います。昔習ったことのあるような三角関数ですが、理屈はどうでも・・・。
要するに円周上の1点の座標値は、「回転角度θ」と「回転半径R」から、
x = cosθ×R
y = sinθ×R
このような式で求められます。
ただし、この場合の「回転角度θ」はラジアン角といって、普通の360度の角度とは別の単位です。 普通の角度をラジアン角に変換する式は、
ラジアン角θ = 普通の角度×π/180 |
重要なのはこの式の応用ですから、式自体についてあまり深く追求しないで結果だけを丸覚えしてください(笑)
そして、普通の角度(「_rotation」の値に相当)を変数kakudo、ラジアン角を変数theRadian、半径を変数Rとしたとき、これをスクリプトで表現すると、
theRadian = kakudo * Math.PI
/ 180; ※先に普通の角度をラジアン角に変換して
this._x = Math.cos( theRadian
) * R; それをそれぞれの式に当てはめます。
this._y = Math.sin( theRadian
) * R;
このようになります。
具体的には・・・
@まず、中心(基準)点が中央にある「球体」ムービークリップをステージの任意の場所に配置します。
AFLASHでは、シーン編集画面のステージにあるムービーの左上が座標の原点「x=0,y=0」ですから、そのままでは再生したときムービーの左上を中心に回転してしまいます。
ムービーの任意の位置(例えば中央)を中心に回転させるには、次の2つの方法があります。
ひとつは、上記の式で円の中心点の座標を指定する方法。
指定したい円の中心点の座標を、(xCenter,yCenter) としたとき、
this._x = Math.cos( theRadian ) * R + xCenter;
this._y = Math.sin( theRadian ) * R + yCenter;
このように記載します。
ムービーの大きさが200×200なら、その中央の座標は「x=100,y=100」ですから、それぞれに100の値を加えます。
this._x = Math.cos( theRadian ) * R + 100;
this._y = Math.sin( theRadian ) * R + 100;
これで、ムービーの中央を中心に回転します。
もうひとつは、回転の対象である「球体」ムービークリップをさらに別のムービークリップで包み込む方法。
こうすることで回転図形の座標の原点は、それを包み込んだムービークリップの中心(基準)点に変わります。
そして、包み込んだムービークリップを、シーン編集画面でムービーの中央に配置すれば、そこが円の中心点になります。
以下のサンプルは、後者の方法で行っています。
 |
@の「球体」ムービークリップをステージでクリック選択。
メニューバー「挿入」→「シンボルに変換」で、名前を仮に「回転エリア」、タイプを「ムービークリップ」、基準点を中央にして「OK」をクリック。
これで左図のように「回転エリア」ムービークリップの中に「球体」ムービークリップが包含されます。
「球体」が描く円の中心(座標の原点)は、それを包含する「回転エリア」ムービークリップの中心(基準)点ですから、「回転エリア」ムービークリップがシーン編集画面でムービーの中央にあれば、そこを基準に回転することになります。
※円運動は「回転エリア」の中心(基準)点を中心にアクションスクリプトで動作しますから、編集時に「球体」を「回転エリア」内のどの位置に配置しても構いません。 |
Bこの「回転エリア」編集画面上で、「球体」ムービークリップをクリック選択し、「アクションパネル」で以下のようなクリップアクションを記載します。
onClipEvent (load) { 自分が読み込まれた最初に(初期値として以下を定義)
R = 100; ←変数R(半径)に100を代入
kakudo = 0; ←変数kakudo(普通の角度)に 0 を代入
}
onClipEvent (enterFrame) { フレームレートごとに以下を繰り返す
theRadian = kakudo * Math.PI / 180; ←普通の角度をラジアン角に変換して変数theRadianに代入
this._x = Math.cos( theRadian ) * R; ←角度と半径からX座標値を計算して、そこに自分を配置
this._y = Math.sin( theRadian ) * R *
0.5; ←角度と半径からY座標値を計算して、そこに自分を配置
kakudo += 10; ←普通の回転角度に10を加える
}
Y座標計算で、回転半径Rに「×0.5」とすることは、Y座標の半径を2分の1に縮小することになるので、その分上下に扁平した楕円軌道になるわけです。
したがってこの「0.5」は楕円の「扁平率」ということになり、値を小さくすればするほど楕円軌道が扁平し、「0」で水平軌道、省略すると(「扁平率」
=1)正円軌道になります。
※最後の行で、kakudo += 10;として、毎回、普通の角度を10ずつ大きくしているので、やはり時計回りに回転します。
※サンプルは、ここをクリック。
(ball_kaiten11.fla)
|