如果Mouse Down为true,如何注册hitTest?

时间:2014-02-18 10:18:15

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

我想知道如果MOUSE_DOWN事件等于true,如何在两个影片剪辑之间注册Hittest。

所以我有一个名为playerHook的影片剪辑充当鼠标,每当该影片剪辑与另一个名为octopusBoss的影片剪辑接触并点击它时,我希望它能够注册一个hittest,从健康状况中减去一点。

这是我到目前为止所做的但不确定下一步该做什么:

在我的主构造函数中:

playerHook.addEventListener(Event.ENTER_FRAME, playerHookMove);
playerHook.addEventListener(MouseEvent.MOUSE_DOWN, onMDown);
playerHook.addEventListener(MouseEvent.MOUSE_UP, onMUp);

然后我在两个函数onMDown和onMUp中设置了两个布尔值:

private function onMDown(e:MouseEvent):void 
{
    mouseIsDown = true;
}

private function onMUp(e:MouseEvent):void 
{
    mouseIsUp = false;          

}

然后我有这个功能,目前在我的游戏循环中,我希望只有当用户点击OctopusBoss时才会发生:

private function checkPlayerHitOctopusBoss():void 
{
    if (playerHook.hitTestObject(octopusBoss))
    {
         trace("Hit Octopus");
         octopusBossHealth --;              
    }else 
    if (octopusBossHealth <= 0)
    {
         octopusBoss.destroyOctopusBoss();
    }
}

但我无法将鼠标布尔值传递给if语句。我知道我错过了一些至关重要的东西!

1 个答案:

答案 0 :(得分:1)

首先,您需要为octopusBoss添加一些名称,如下所示:

octopusBoss.name = "octopusBoss";

修改onMDown函数,如下所示:

private function onMDown(e:MouseEvent):void 
{
    if(e.target.name == "octopusBoss") //Check if octopusBoss is under mouse
    mouseIsDown = true;
}

您的checkPlayerHitOctopusBoss功能如此:

private function checkPlayerHitOctopusBoss():void 
{
   if (playerHook.hitTestObject(octopusBoss) && mouseIsDown) // check mouse down
   {
       trace("Hit Octopus");
       octopusBossHealth --;              
   }else 
   if (octopusBossHealth <= 0)
   {
       octopusBoss.destroyOctopusBoss();
   }
}

更新: 如果可以将MouseEvents直接添加到octopusBoss,就像这样:

octopusBoss.addEventListener(MouseEvent.MOUSE_DOWN, onMDown); octopusBoss.addEventListener(MouseEvent.MOUSE_UP, onMUp);

然后,您还可以使用e.currentTarget.name