如何限制炮塔的运动?

How do I constrain a turret's movements?

我有一个炮塔我想通过炮塔旋转并面向鼠标来限制旋转,这样它就不会超过最大旋转并在达到最大点时停止旋转。并且在达到最小度数时不会低于最小度数,但最大和最小角度会根据鼠标面向的一侧而变化。

当鼠标移到炮塔的右侧时,也就是 mouseX 大于炮塔的 x 位置。 炮塔将改变 scaleX 并且炮塔向右转动并且将瞄准旋转限制在 120 度和 -160 度之间。

当炮塔朝左时,也就是 mouseX 小于炮塔的 x 位置。炮塔将切换 scaleX 并向左转。然后,受限瞄准旋转切换到 70 度和 -20 度之间。

这是我的代码,我是计算旋转和度数的新手,所以我想我完全错了,因为炮塔根本不旋转,除非我删除代码。我需要帮助修复代码。谢谢!

function update(e:Event)
{
    //make the turret face the mouse
    if (parent != null)
    {
        var dx = parent.mouseX - x;
        var dy = parent.mouseY - y;
        var angle = Math.atan2(dy, dx)/Math.PI * 180;

    //this is supposed to constrain the rotation if the mouse is bigger than turret's x 
    //position, else constrain it the other way, this part of the code doesnt work.
    //this code makes it so the turret is unable rotate at all
    //if i remove the code, the turret can rotate freely though.
    if(mouseX > x)
    {
        angle=Math.min(angle,120);
        angle=Math.max(angle,-160);

    } 
    else 
    {
        angle=Math.min(angle,-20);
        angle=Math.max(angle,70);

    }       
        rotation = angle;
    }
}

您尚未指定 update 的调用方式。如果它被(比如说)鼠标移动事件调用,您可以直接从该事件中获取鼠标坐标。

这是使用该技术对我有用的另一个版本。脚本在 'turret' 影片剪辑的时间轴中。

function update(e:MouseEvent)
{
    //make the turret face the mouse
    if (parent != null)
    {
        var dx = e.stageX - x;
        var dy = e.stageY - y;
        var angle = Math.atan2(dy,dx) / Math.PI * 180;

        //this is supposed to constrain the rotation if the mouse is bigger than turret's x 
        //position, else constrain it the other way, this part of the code doesnt work.
        //this code makes it so the turret is unable rotate at all
        //if i remove the code, the turret can rotate freely though.
        if (mouseX > x)
        {
            angle = Math.min(angle,120);
            angle = Math.max(angle,-160);

        }
        else
        {
            angle = Math.min(angle,-20);
            angle = Math.max(angle,70);

        }
        rotation = angle;
    }
}

stage.addEventListener(MouseEvent.MOUSE_MOVE, update);