Обнаружение фрагмента ролика было перевернуто горизонтально на сцене в as3 - PullRequest
3 голосов
/ 28 сентября 2011

Если два фрагмента фрагмента ролика одного и того же фрагмента ролика размещаются на сцене, а один переворачивается горизонтально во Flash. Есть ли способ определить, какой из них перевернут горизонтально в коде? Похоже, ScaleX остается без изменений.

MovieClip был перевернут горизонтально с помощью пользовательского интерфейса Flash (Edit-> Flip Horizontal), а не с помощью кода.

Ответы [ 2 ]

6 голосов
/ 28 сентября 2011

Попробуйте:

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

trace( isFlippedHorizontally( yourObject ) );

редактирование:
Я должен был учитывать scaleX объекта; отрегулировано сейчас.

В качестве альтернативы:

import fl.motion.MatrixTransformer;

function isFlippedHorizontally( obj:DisplayObject ):Boolean
{
    return MatrixTransformer.getSkewYRadians( obj.transform.matrix ) / Math.PI == 1;
}

trace( isFlippedHorizontally( yourObject ) );

редактирование:
В последнем примере случайно был вычислен вертикальный переворот вместо горизонтального переворота.

0 голосов
/ 28 сентября 2011

Мне больше нравится решение fireeyedoy за его компактность и простоту, но вы также можете сделать это с некоторым сравнением растровых данных:

var bmd1:BitmapData = new BitmapData(mc1.width, mc1.height);
var bmd2:BitmapData = new BitmapData(mc2.width, mc2.height);
var cbmd1:BitmapData = new BitmapData(mc1.width, mc1.height);
var cbmd2:BitmapData = new BitmapData(mc2.width, mc2.height);

var cmatrix1:Matrix = new Matrix();
var cmatrix2:Matrix = new Matrix();

cmatrix1.tx = -mc1.x;
cmatrix1.ty = -mc1.y;

cmatrix2.tx = -mc2.x;
cmatrix2.ty = -mc2.y;

bmd1.draw(mc1);
bmd2.draw(mc2);

cbmd1.draw(this, cmatrix1);
cbmd2.draw(this, cmatrix2);


if(cbmd1.compare(bmd1))
{
    trace("mc1 is flipped!");
}
else if(cbmd2.compare(bmd1))
{
    trace("mc2 is flipped!");
}

Предполагается, что ваши видеоклипы выровнены по левому верхнему краю. Если нет, то вам нужно будет добавить соответствующие значения tx и ty в матрицу при их рисовании.

...