所以我正在使用AS3开发一个游戏,目前需要进行2D碰撞检测。为此,我自然而然地选择了bitmapData和hitTest,但由于我无法正确使用它,所以我决定使用freeactionscript.com的CollisionTest引擎。
然而,即使使用这个引擎,我仍然遇到了问题,并且我将尝试通过附带的图片来解释。
希望有人能帮忙,这涉及到IT技术。如果您想尝试,请点击此处。
谢谢, -UPTX
简短版:hitTest仅适用于灰色正方形的四分之一,如下所示:
- 设置 - 我有一个黄色角色和一个灰色正方形。
- 您可以清楚地看到黄色角色被灰色正方形阻止 - 在这一点上,我无法再走了。
- 在正方形下面也可以很好地工作,我在这里也不能再走了。
- 现在,这里是两难选择 - 碰撞检测在右下角很好地工作。我可以在正方形的任何其他部分自由地行走,并且不会发生任何多余的碰撞(即在灰色正方形外部)。
我正在使用以下代码:
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;
}
希望有人能帮忙,这涉及到IT技术。如果您想尝试,请点击此处。
谢谢, -UPTX
简短版:hitTest仅适用于灰色正方形的四分之一,如下所示:
![picture included](https://imgur.com/63uqR.png)