【问题标题】:hitTestPoint with 'shapeFlag=true' doesn't work in AS3带有“shapeFlag=true”的 hitTestPoint 在 AS3 中不起作用
【发布时间】:2013-07-21 08:24:42
【问题描述】:

我只是在 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 为真。但只有当鼠标出现在透明的等距精灵上时,它才应该是真的。

有解决办法吗,先谢谢了。

【问题讨论】:

  • 图片+1。我稍后会读你的问题
  • myBitmap 是图像吗?我认为 shapeflag 适用于本质上为矢量的形状,例如使用 Flash Professional 中的工具绘制的形状,使用 beginFill、lineTo 等图形指令绘制的形状。
  • @catholicon mybitmap 是一个位图对象。它的 bitmapData 是一个透明的 png。
  • 我没有使用过 Flash Professional,但我认为您可以将图像导入 Shape 中。该形状可能需要一些编辑,但 shapeFlag 应该可以工作。顺便说一句,如果它是一个简单的形状,那么绘制它会更简单。
  • @catholicon 还有其他解决方法吗?这是不可能的,因为我是通过 actionscript3 LoaderMax 加载图像,而不是 flash。它是一个巨大的精灵数组,不仅仅是一个精灵。这些精灵创建了一个等距的土地,就像在等距城市管理游戏中一样。我想检测鼠标悬停在哪个精灵

标签: actionscript-3 hittest


【解决方案1】:
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多