AS3.0 への移植 Orbital TYPE(2)
2007/07/03 23:39 - AS3.0
前回のサンプルでは、マウスカーソルの位置と各オブジェクトの回転について下記のようにコーディングしていました。
_firstNode.rotationY += _container.mouseX / 100; _rootNode.rotationX += _container.mouseY / 300;
そのためマウスを領域の上もしくは下に置きっぱなしにしておくと 3D 環が X軸を基準に無限回転をしてしまいます。
ですが、作品版 Orbital TYPE では mouseY の位置による X軸を基準の 3D 環上下動は、適度な位置で止まり、無限回転はおろか上下反転するようなこともありません。
今回はこの部分の実装についてです。
まずは何も考えずにコーディングした例。
_firstNode.rotationY += _mpb.pos.x / 100; _rootNode.rotationX = _mpb.pos.y / 5;
ちなみに _mpb というのはマウスカーソルの有効範囲をステージ内に限定するためのものです。詳しくは最後にアップする MousePositionBeacon.as の中身を参照してください。
3D環の上下動が mouseY の動きにシンクロし過ぎてて凄くイヤです(コーディング上当たり前の動きをしているだけですが)。
やっぱり慣性っぽい動きをしてくれないと。
そんなわけで下記のように改造を施したサンプル。
_firstNode.rotationY += _mpb.pos.x / 100; Tweener.addTween( _rootNode , { rotationX:_mpb.pos.y/5 , time:0.5 , transition:"linear" } );
mouseY に対する 3D オブジェクト全体の rotationX を Tweener で制御することで、慣性っぽい動きをさせています。
慣性っぽい動きを実現できたのはいいんですが、でもこの程度のことで Tweener を使うのは、何か大げさ過ぎる気がしないでもない。
これぞまさに「割鶏焉用牛刀」てな感じですか。
でももう、到達値と現在値の差分を割って += するコードは書きたくないんで、このまま行きます。
- Main.as ( 2.66 KB )
- AqMath.as ( 1.20 KB )
- MousePositionBeacon.as ( 1.30 KB )