どうも、iPhone 3G Sが発表されたはいいものの、FlashLiteの実機テストが出来なくなるので飛びつくか迷っているナカムラです。
ゲーム制作では衝突判定が頻繁に使用されますが、今回はそれでハマった話でも。

衝突というと、AS3ではhitTestObject・hitTestPoint、AS2ではhitTest等、ビルトインメソッドが用意されているので、これらが使える場合は手っ取り早く利用できます。
また、それらに頼らずオブジェクト同士の距離を求める場合は、三平方の定理を用いて

var distance:Number; distance = Math.sqrt( Math.pow( mc1.x - mc2.x, 2 ) + Math.pow( mc1.y - mc2.y, 2 ) );

という感じでやるのだと思います。
しかし、FlashLite1.1ではMath関数がサポートされていません(一応使えるが、精度が信用できない)。 仕方ないのでオブジェクトの四隅の座標を比較したりしてムリヤリ判定を行っていたのですが、どうも精度がよろしくありません。

そこで調べてみると、海外のサンプルで下記のようなものが!
http://www.flashkit.com/movies/Games/collision_detection/Circle_C-Degrees-446/index.php?chk=no
ここでダウンロードできるファイルを見てみると、オブジェクト間の距離を2乗した状態で比較しているようです。 これなら平方根が使えなくても問題ナシ。まさに目からウロコです。
FlashLiteのコードにするとこんな感じ(mc1、mc2は中心が基準)。

r1 = mc1._width / 2; r2 = mc2._width / 2; dX = mc1._x - mc2._x; dY = mc1._y - mc2._y; if ( ( dX * dX ) + ( dY * dY ) <= ( ( r1 + r2 ) * ( r1 + r2 ) ) ) { //衝突時の処理 }

FlashLiteをやっているとFlash4時代のTipsが逆に重宝するという、なんとも妙な話でした。

HTML5飯