2010.04.15
こういう感じのものです。(マウスオーバーで回転)
MCをスクリプトで回転させるくらいは普通にやってましたが、
上のように一定量回転したら止まるものを作ろうとしたら
思いのほか苦労したという話です(笑)
( 現在の角度 ) + ( 350° ) = ( 目標の角度 )
というようにしてまず目標地点を決めるのですが、何かおかしい数字が出ます。
もちろん現在の角度に問題があるわけですが・・
試しに20°ずつ増やして数値を見ると、
0°, 20°, 40°, 60°, 80°, 100°, 120°, 140°, 160°, 180°, -160°, -140°, -120°, -100°, -80°・・
というようになっています。
180°以上のときに数値を取得するとマイナスになってしまうので、
つまり例えば 200°のときには
( 200° + 350° = 550° )
となってほしいのが、
( -160° + 350° = 190° )
となってしまうので、挙動がおかしくなってしまうのでした。
ので、
nowR = 0;
targetR = nowR + 350;
onEnterFrame = function(){
this._rotation = nowR+= (targetR - nowR) / 20;
}
というように nowR という代わりの変数を用意して、
計算の中では _rotation で取得をしないようにすることで解決できました。
MCをスクリプトで回転させるくらいは普通にやってましたが、
上のように一定量回転したら止まるものを作ろうとしたら
思いのほか苦労したという話です(笑)
( 現在の角度 ) + ( 350° ) = ( 目標の角度 )
というようにしてまず目標地点を決めるのですが、何かおかしい数字が出ます。
もちろん現在の角度に問題があるわけですが・・
試しに20°ずつ増やして数値を見ると、
0°, 20°, 40°, 60°, 80°, 100°, 120°, 140°, 160°, 180°, -160°, -140°, -120°, -100°, -80°・・
というようになっています。
180°以上のときに数値を取得するとマイナスになってしまうので、
つまり例えば 200°のときには
( 200° + 350° = 550° )
となってほしいのが、
( -160° + 350° = 190° )
となってしまうので、挙動がおかしくなってしまうのでした。
ので、
nowR = 0;
targetR = nowR + 350;
onEnterFrame = function(){
this._rotation = nowR+= (targetR - nowR) / 20;
}
というように nowR という代わりの変数を用意して、
計算の中では _rotation で取得をしないようにすることで解決できました。
トラックバック(0)
この記事を参照しているブログ: Flash:回転するMC
トラックバックURL: http://www.gravity-works.jp/cmt/mt-tb.cgi/2007






コメントする