如何使用旋转的 Movie Clip 进行角度拍摄?

How to shoot on angles with rotating Movie Clip?

大家好,我遇到了一些麻烦。所以我有一个添加到舞台的 Barrel 影片剪辑数组和一个名为 Circle 的影片剪辑,当它与任何barrels in array 当前正在测试的桶开始旋转。它在居中的注册点上旋转。所以在我的 ENTER_FRAME 事件中,我为枪管旋转和击中测试等进行了所有设置...

这是将圆添加到桶中的方式:

            if (!circleFired)
            {
                circle.x = globalFirePoint.x;
                circle.y = globalFirePoint.y;
                currentCannon.addChildAt(circle, 0);
            }

现在我想要完成的是当用户点击屏幕时,圆圈影片剪辑从桶中拍摄。现在我的圆圈从枪管以它应该发射的角度发射,但它不是从它发射的角度直线射击而是在枪管旋转的顺时针位置开始非常快速地弯曲。

这是我拥有的代码,除了一个问题外,它还可以正常工作:

        var dX:Number = globalFirePoint.x;
        var dY:Number = globalFirePoint.y;
        var angle:Number = Math.atan2(dY, dX);

        if (circleFired)
        {
            circle.x +=  Math.sin(deg2rad(angle -90)) * velocity;
            circle.y += Math.cos(deg2rad(angle - 90)) * velocity;
        }

所以globalFirePoint是这样的:

globalFirePoint = localToGlobal(new Point(currentCannon.mcFirePoint.x, currentCannon.mcFirePoint.y));

这是我想要圆圈拍摄的起点。

这里是 deg2rad 函数:

private function deg2rad(num:Number):Number
    {
        var radians:Number = num * (Math.PI / 180);
        return radians;
    }

我知道我需要 sin 和 cos 来计算正确的角度?数学错了吗?为什么从 globalFirePoint 发射圆圈时圆圈是弯曲的?我该怎么做才能让它走直线?

如有任何帮助,我们将不胜感激!

globalFirePoint 是否会在每个 ENTER_FRAME 事件中发生变化?如果是这样,那么计算出的角度也会发生变化,从而导致您遇到的曲线。

解决此问题的一种方法是在用户按下屏幕时计算globalFirePoint。然后在每个 ENTER_FRAME 事件上而不是重新计算 globalFirePoint,使用已经计算的 globalFirePoint,除非用户在圆桶中时按下屏幕,否则不会改变。

你也应该只计算用户按下屏幕时的角度。无需在每个 ENTER_FRAME 事件中计算它,因为您唯一对角度感兴趣的时间是从桶中射出圆圈时。