MovieClipの_widthと_heightが混乱 [Edit]

MovieClipの三半器官障害?
人間をぐるぐると回してやると、目が回ってまっすぐに歩けなくなります。平衡感覚を司る三半器官に、一時的な障害が発生するためということらしいです。

MovieClipインスタンスにも、どうやら三半器官があるようです。回転すると、水平方向と垂直方向がわからなくなります。

回転したMovieClipの_widthと_hieghtを変更してみる
再現の方法は、いたって簡単です。まず、MovieClip._rotationプロパティを90加算して、MovieClipインスタンスを90度回転します。つぎに、MovieClip._widthおよびMovieClip._heightプロパティで、幅と高さをそれぞれ変更します。その結果は、予想とはまったく異なります。

たとえば、メインのタイムラインに100×100ピクセルの正方形のMovieClipインスタンスmy_mcを配置して、つぎのスクリプトを実行してみましょう。

// メインのタイムライン: _root
// フレームアクション
_root.my_mc._rotation += 90;
_root.my_mc._width += 50;
_root.my_mc._height += 50;

合理的な予測では、90度回転したインスタンスの幅・高さとも50ピクセル加算され、150×150ピクセルの正方形に拡大すると考えられます。しかし、実際には200×100ピクセルの長方形に変形します。

サンプルムービーで結果当てゲーム
実際にサンプルSWFムービーでお試しいただくのが、わかりやすいでしょう。また、ソースのFLAファイル(Zip圧縮約8KB)もダウンロード可能です。SWFの再生あるいはソースファイルを開くためには、それぞれFlash Player 6およびFlash MXが必要です。

回転を180度にするなど、水平軸と垂直軸が入替わらない状態であれば、この現象は発生しません。90度回転した場合で調べた結果では、プラットフォームに関係なく100%再現しています。再現性がきわめて高く、バグであることが誰の目からも疑いないという貴重なサンプルといえます。

どのボタンをどういう順番で押したら結果がどうなるか、ゲームにすることもできそうです。また、サンプルムービーは、[shift]キーを押しながらボタンをクリックすると、プロパティ値をマイナスすることができます。MovieClipを適当な大きさに拡大しておいて、元の100×100に戻すというのも、意外と難しいです。ただし、途中でどちらか一方の値が100より小さくなったら失格とします。

_____

作成者: 野中文雄
作成日: 2003年7月12日

その他の記事