Actionscript 3.0 Flash中Sprite的碰撞检测

Jel*_*lla 1 flash collision-detection actionscript-3

我正在AS3.0中制作一款类似于非常类似于kurve的游戏.到目前为止,我已经完成了4个不同玩家的动作,并且工作正常.

我现在要进行碰撞检测,以便测试一个'蠕虫' - 可以说,是否与彼此或它自己的尾巴相撞.

据我了解,如果我使用hitTestObject(); 它将使用整个对象的注册区域,这将是一个巨大的问题,因为这个注册进行了包含所有对象的4面注册.因此,如果使用它,它只会通过输入这个矩形而不是击中实际的蠕虫来"碰撞".这是否正确理解?

我一直在寻找不同的碰撞检测方法,似乎无法为我的项目找到最佳方法.

我的想法是检查'蠕虫'是否在白色背景上绘制他们的新精灵.如果他们不是,那它肯定会有所作为.

您可以在此处查看我如何使用我的代码:.as格式的代码链接到.fla文件

对不起我的问题,希望它有点意义.任何帮助是极大的赞赏!!

最好的问候 - Jesper

小智 5

如果您希望Pixel Perfect Collision Detection具有高效的CPU使用率,请尝试此功能:

trace("Collided: " + (areaOfCollision(mc1, mc2) != null));
trace("Where: " + areaOfCollision(mc1, mc2));

function areaOfCollision(object1:DisplayObject, object2:DisplayObject, tolerance:int = 255):Rectangle {
    if (object1.hitTestObject(object2)) {
        var limits1:Rectangle = object1.getBounds(object1.parent);
        var limits2:Rectangle = object2.getBounds(object2.parent);
        var limits:Rectangle = limits1.intersection(limits2);
        limits.x = Math.floor(limits.x);
        limits.y = Math.floor(limits.y);
        limits.width = Math.ceil(limits.width);
        limits.height = Math.ceil(limits.height);
        if (limits.width < 1 || limits.height < 1) return null;

        var image:BitmapData = new BitmapData(limits.width, limits.height, false);
        var matrix:Matrix = object1.transform.concatenatedMatrix;
        matrix.translate(-limits.left, -limits.top);
        image.draw(object1, matrix, new ColorTransform(1, 1, 1, 1, 255, -255, -255, tolerance));
        matrix = object2.transform.concatenatedMatrix;
        matrix.translate(-limits.left, -limits.top);
        image.draw(object2, matrix, new ColorTransform(1, 1, 1, 1, 255, 255, 255, tolerance), BlendMode.DIFFERENCE);

        var intersection:Rectangle = image.getColorBoundsRect(0xFFFFFFFF, 0xFF00FFFF);
        if (intersection.width == 0) return null;
        intersection.offset(limits.left, limits.top);
        return intersection;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

在成功预备之后hitTestObject(),此功能在背景上从每个涂有不同颜色的两个对象的形状拍摄快照,然后将它们与新颜色上的颜色相交覆盖它们,返回Rectangle所得到的形状.非常酷.

要了解有关Pixel Perfect Collision Detection的更多信息,您可以进行谷歌碰撞检测,然后选择其中一个名称:" The ActionScript Man "," Troy Gilbert "," Boulevart(wim) "," Grant Skinner(gSkinner) "或" Senocular ".顺便说一下,那些家伙是很棒的AS3参考.