如何安全地检测水平翻转的动画片段,防止旋转的动画片段?

时间:2014-06-26 23:04:06

标签: actionscript-3 matrix

我在舞台上有2个动画片段。一个旋转180度,另一个水平翻转(通过翻转水平命令)。我需要做的是检测水平翻转的那个。

我从另一个答案(Detecting a movieclip has been Flipped horizontally on the stage in as3)尝试了以下功能:

function isFlippedHorizontally( obj:DisplayObject ):Boolean
   {
    return obj.transform.matrix.a / obj.scaleX == -1;
   }

   trace( isFlippedHorizontally( yourObject ) );

...但它似乎无法在这种情况下工作,因为它在两种情况下都返回true。

此外,是否有任何方法可以安全地检测翻转部分,而不是缩放/旋转变换?

1 个答案:

答案 0 :(得分:0)

让我们想象一个抽象的例子:

有两个实心填充的圆圈,因此在翻转的圆圈和旋转的圆圈之间没有任何视觉差异。



 enter image description here


但是在代码中我们可以通过使用“旋转”和“缩放”值清楚地看到差异。 如果第一个圈子被称为circle1而第二个圈子被称为circle2。我们可以追踪它们的比例值和旋转值:

trace(c1.rotation); // 180
trace(c1.scaleX); // 1
trace(c1.scaleY); // 1

trace(c2.rotation); // 0
trace(c2.scaleX); // -1 - flipped horizontally
trace(c2.scaleY); // 1

所以isFlippedHorizo​​ntally的函数可能如下所示:

function isFlippedHorizontally(targetObject:DisplayObject):Boolean
{
    if (targetObject.scaleX < 0)
        return true;

    return false;
}

请注意,此方法假设如果您展开翻转的图像,它仍会被视为水平翻转。

如果您想知道对象是否仅被翻转而未拉伸和旋转,请使用:

function isFlippedHorizontallyOnly(targetObject:DisplayObject):Boolean
{
    if (targetObject.scaleX == -1 && targetObject.rotation == 0)
        return true;

    return false;
}