だから私は現在、2D 衝突チェックが必要な AS3 を使用してゲームに取り組んでいます。これを行うために、私は当然 bitmapData と hitTest を使用していましたが、それを適切に行うことができなかったため、freeactionscript.com の CollisionTest エンジンを使用することにしました。ただし、これを使用しても問題が発生するため、含まれている画像を使用して説明します。
- セットアップ - 黄色のキャラクターと灰色の四角があります。
- 黄色のキャラクターが灰色の四角で止まっているのがはっきりとわかります。この時点で、私はこれ以上歩くことができません。
- 広場の下もいいし、ここもこれ以上歩けない。
- さて、ここにジレンマがあります-衝突検出は右下隅でうまく機能します。正方形の他の部分では自由に歩き回ることができ、余分な衝突 (つまり、灰色の正方形の外側) は発生しません。
私はこのコードを使用しています:
public class CollisionTest
{
// vars
private var _returnValue:Boolean;
private var _onePoint:Point;
private var _twoPoint:Point;
private var _oneRectangle:Rectangle;
private var _twoRectangle:Rectangle;
private var _oneClipBmpData:BitmapData;
private var _twoClipBmpData:BitmapData;
private var _oneOffset:Matrix;
private var _twoOffset:Matrix;
/**
* Complex collision test. Use this for objects that are rotated, scaled, skewed, etc
* @param clip1 Takes DisplayObjectContainer as argument. Can be a Sprite, MovieClip, etc.
* @param clip2 Takes DisplayObjectContainer as argument. Can be a Sprite, MovieClip, etc.
* @return Collision True/False
*/
public function complex(clip1:DisplayObjectContainer, clip2:DisplayObjectContainer):Boolean
{
_returnValue = false;
_twoRectangle = clip1.getBounds(clip1);
_oneOffset = clip1.transform.matrix;
_oneOffset.tx = clip1.x - clip2.x;
_oneOffset.ty = clip1.y - clip2.y;
_twoClipBmpData = new BitmapData(_twoRectangle.width, _twoRectangle.height, true, 0);
_twoClipBmpData.draw(clip1, _oneOffset);
_oneRectangle = clip2.getBounds(clip2);
_oneClipBmpData = new BitmapData(_oneRectangle.width, _oneRectangle.height, true, 0);
_twoOffset = clip2.transform.matrix;
_twoOffset.tx = clip2.x - clip2.x;
_twoOffset.ty = clip2.y - clip2.y;
_oneClipBmpData.draw(clip2, _twoOffset);
_onePoint = new Point(_oneRectangle.x, _oneRectangle.y);
_twoPoint = new Point(_twoRectangle.x, _twoRectangle.y);
if(_oneClipBmpData.hitTest(_onePoint, 255, _twoClipBmpData, _twoPoint, 255))
{
_returnValue = true;
}
_twoClipBmpData.dispose();
_oneClipBmpData.dispose();
return _returnValue;
}
どなたかお力添えいただければ大変助かります。必要に応じて、ここで自分で試すことができます。
事前に感謝します、-UPTX
tl;dr: ここに示すように、hitTest は灰色の正方形の 1/4 で機能します。