所以我有一个名为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);
}
现在我遇到的问题是,每当我试图用一个名为currentShark
的Move Clip点击测试hookLine
时,点击测试会起作用,我会得到一个轨迹,但当我把钩线弯曲到一边,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);
}
}
}
鲨鱼和钓鱼线的边界框很可能发生碰撞。当弯曲的钓鱼线向左或向右移动时,边界框将与钓鱼线本身的宽度和高度相同。打开您的项目并发布为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
只需查找公共方法的列表。