带有'shapeFlag = true'的hitTestPoint在AS3中不起作用

时间:2013-07-21 08:24:42

标签: actionscript-3 hittest

我只是在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为true。但是只有当鼠标出现在透明等长精灵上时它才会成真。 http://i41.tinypic.com/2rmb0i0.png

是否有解决方案,提前谢谢。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我通常会采用一些方法进行测试。

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

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

相关问题