1

我会问一个更简单的问题。让我们说无论如何,但我已经计算了对象中心和鼠标(角度)之间的线的旋转。从北 aka 0 开始,沿 CW 循环到北附近的 359。我要求 AS3 “object.rotation = angle;” 每一帧。我有 2 个显示值“角度”和“object.rotation”的文本区域。180 之后 object.rotation 变为 -180 并倒退到 0。为什么会这样?

更简单。我得到值A,然后说A = B。然后要求计算机显示A并显示B。在180到360处,B = B-360。

旋转是令人满意的,但数字是错误的。需要解释为什么数字不合适。需要有关如何使对象旋转范围为 0-360 并由 I 输入的数字直接确定的建议。就我而言,“角度”。

这意味着如果我输入旋转 2892 它应该是它(是的,8 * 360 + 12),而不是 12,不是 -348 ......即使这些在视觉上代表相同的旋转。

4

2 回答 2

3

看起来你被它困住了。从文档中:

从 0 到 180 的值代表顺时针旋转;从 0 到 -180 的值表示逆时针旋转。超出此范围的值被添加到 360 或从 360 中减去以获得该范围内的值。例如,语句 my_video.rotation = 450 与 my_video.rotation = 90 相同。

如果要存储 2892 而不是 12,则必须手动跟踪它。

当您输入非标准内容时,他们会为您标准化。我认为这是为了让使用设计器的人更容易,尽管也许一些图形优化也依赖于它。

于 2013-02-13T18:41:50.370 回答
3

我预计这是 Flash 溢出保护的结果。想象一个影片剪辑转了一小时,每一帧它的旋转增加了 50。如果没有这样的剪辑,它的旋转值最终会以百万计,这将导致精度和性能损失(在某些情况下) 10000000*PI/180 的正弦值。因此,为了防止出现不希望的或不同的行为,Flash 播放器的开发人员使实际旋转以 -180...180 的间隔返回。

您可能会尝试覆盖旋转 setter/getter 函数,以便按原样保留传递的结果。

class RotationTest extends Sprite {
    private var myRotation:Number;
    public override function set rotation(value:Number):void {
        super.rotation=value;
        myRotation=value;
    }
    public override function get rotation():Number { return myRotation; }
}
于 2013-02-13T18:44:11.540 回答