使用Graphics.lineTo / curveTo时,HitTest无法正常工作

时间:2014-02-21 01:48:44

标签: actionscript-3 graphics flashdevelop flash-cs6 hittest

所以我有一个名为hookLine的电影片段,它从我的mainEngine课程添加到舞台上。这个空的movieClip连接到我的fisherman影片剪辑并曲线到我的playerHook影片剪辑。它添加并连接到舞台,如下:

在我的mainEngine函数循环中:

playerHookLine();

然后功能:

private function playerHookLine():void 
    {

        //Add hook line to fisherman and playerhook
        hookLine.graphics.clear();
        hookLine.graphics.lineStyle(1);
        hookLine.graphics.moveTo(fisherman.x, fisherman.y);
        hookLine.graphics.curveTo(playerHook.x, playerHook.y, mouseX, mouseY);

    }

现在我遇到的问题是每当我尝试使用名为hookLine的名为currentShark的移动剪辑命中currentShark时,hitTest正常工作并且我得到一条跟踪,但当我弯曲我的时候它根本不准确勾引到两侧的线条,private function checkPlayerHitShark():void { //Loop through all sharks for (var i:int = 0; i < aSharkArray.length; i++) { //Get current Shark in i loop var currentShark:mcShark = aSharkArray[i]; //Check if shark is hittest with Hook if (currentShark.hitTestObject(playerHook) || currentShark.hitTestObject(hookLine)) { trace("Hook Hit Shark"); trace("hit LINE"); removePlayerLive(); //Destroy player playerHook.destroyPlayerHook(); hookLine.destroyHookLine(); //Remove shark from array aSharkArray.splice(i, 1); //Add new Hook to stage stage.addChild(playerHook); stage.addChild(hookLine); } } } 出现在舞台上,它会自动命中测试并给我一些痕迹。所以基本上鲨鱼甚至不必接触实际的Line Graphic。当鲨鱼被添加到舞台时,它只是注册。

有谁知道为什么会这样?

以下是hitTest函数的用法:

{{1}}

1 个答案:

答案 0 :(得分:1)

鲨鱼和钓鱼线的边界框很可能发生碰撞。当您的弯曲钓鱼线向左或向右移动时,您的边界框将与钓鱼线本身的宽度和高度相同。打开项目并发布为SWF,然后在Flash播放器中打开SWF并按Control + E或单击窗口顶部的View并选择“Show Redraw Regions”。在重新绘制到舞台时,您应该看到边框为红色。

您正在寻找的是鲨鱼和钓鱼线位图上的像素级别命中检测。 BitmapData有一个名为hitTest的方法,它需要一些参数。

您将从Mike Chambers在此处的链接中撰写的文章中找到针对像素级命中检测的出色帮助: http://www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/

可以在此处找到BitmapData.hitTest的文档: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html

只需查看公共方法列表。