2

我只是在 AS3 中添加了一个精灵:

Sprite myspr = new Sprite();
myspr.addChild(mybitmap);
addChild(myspr);

然后我添加了一个事件。我做了 hitTestPoint 来检查鼠标是否在我的精灵上。

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseCheck);

private function mouseCheck(evt:MouseEvent):void {
    var xx:int = stage.mouseX;
    var yy:int = stage.mouseY;
    
    if(myspr.hitTestPoint(xx, yy, true)) {
        ...
        // I'm checking mouse over here.
    }
    
    evt.updateAfterEvent();
}

问题是:当鼠标到达完整的边界框时,hitTestPoint 为真。但只有当鼠标出现在透明的等距精灵上时,它才应该是真的。

有没有解决方案,提前谢谢。

4

2 回答 2

0

我通常有几种方法进行命中测试。

1)最简单的方法是使用您可以在网上找到的已经制作的课程。一些比我聪明得多的人创建了复杂的类,这些类允许更好的像素到像素交互。Paras列出的都不错。这些问题是,对于新用户来说,可能很难理解所有代码以及如何实现它们。通常,一旦您了解正在发生的事情,这很简单。您只需用类文件替换命中测试,然后输入正确的参数。

2)另一种方法是实际进入符号,创建一个新图层,然后在您希望命中测试工作的地方绘制一个矩形(只需将 alpha 调低至 0%)。这似乎是一种愚蠢的方法,毕竟我们只是再次被限制在一个正方形中。但是,它实际上会比您预期的要好得多。只需绘制可能比您正在检测命中测试的角色的高度和宽度略小的正方形,您应该很高兴。给它一个实例名称(即命中方块),然后使用该方块而不是实际的精灵执行 hitTest。它工作得非常好,是一个非常简单的解决方案。但是,对于您要解释的内容,这听起来可能行不通。这种方法更多的是从游戏玩家的角度来看。攻击并被敌人击中时看起来不错,但不是 不一定准确。此外,如果您想对两个角色执行此操作(可能是对敌人的大攻击),只需为两个精灵绘制一个命中框。这可能比使用预制的像素完美命中检测测试更基本一些,但它的效果非常好,只需要几分钟。

于 2013-07-22T16:27:16.017 回答