Flash Lite1.1 携帯Flashゲーム「 _rotation」で回転させたら縮小してしまう


携帯Flash(フラッシュ)ゲーム「Mr.ペン四郎」
ぐらぐらと左右に傾く「ペン四郎」を「5」ボタンで1クリックしながら、
傾きを反転して倒れないように調整していく携帯Flashゲームです。
(彼は定番ペンになるため、きちんとペンの線が引けるか厳しい品質チェックをうけている最中です)

もうほぼ完成かなと、最終デバッグをしていると、、、
なぜが「ペン四郎」がだんだんと小さくなっていくわけではありませんか。。
しまいには小さくなりすぎて見えないくらいに。

ActionScript上では原因がつかめず、ネット上で調査してみると、Adobeのサイトで「_rotation」のコメントを見つけました。

どうやら_rotationの数値が小数点になってしまうと起きてしまう現象のようです。
しかも「45度の倍数」でないと自動的に小数点は出てしまうとのコメント。。
「ペン四郎」は「_rotation」で傾いております。


回避の方法としては、以下の内容です。

*****
[対処法]
「Flashのムービークリップの'#rotation'プロパティを整数以外の値に設定することは 避けてください。
また、'#rotation'プロパティをもとに変更する値を計算するのでなく、別に設けたグローバル変数やプロパティ変数を使って変更する値を計算し、 
'#rotation'プロパティをその変数値に設定するのが確実です。


■グローバル変数を使ったスクリプトの例

global gNextRotation
on exitFrame
 gNextRotation = gNextRotation + 30
 sprite(1).setFlashProperty("MovieClip", #rotation, gNextRotation)
end

*****

小数点が出ないように、45度の倍数にするのはゲーム性上、難しかったので、
あとは毎回、強制的に「_xscale=_yscale=100」の設定を入れて、できるだけ小数点がでないように処理。


scaleをtraceすると「99.4542115~」等、小数値がでるのですが、ほぼ100になったので、
ゲームの表示上では見映えに影響せず、問題がクリアできました!



携帯のFlashゲームは、ちょっとしたところでひっかることが多いので、開発の方のご参考になれば幸いです。



2009.08