我在舞台上有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。
此外,是否有任何方法可以安全地检测翻转部分,而不是缩放/旋转变换?
答案 0 :(得分:0)
让我们想象一个抽象的例子:
有两个实心填充的圆圈,因此在翻转的圆圈和旋转的圆圈之间没有任何视觉差异。
但是在代码中我们可以通过使用“旋转”和“缩放”值清楚地看到差异。
如果第一个圈子被称为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
所以isFlippedHorizontally的函数可能如下所示:
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;
}