所以我有一个名为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}}
答案 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
只需查看公共方法列表。