3 Stimmen

Erkennen, dass ein Movieclip auf der Bühne in as3 horizontal gespiegelt wurde

Wenn zwei Instanzen desselben Filmclips auf der Bühne platziert werden und einer davon in Flash horizontal gespiegelt wird. Gibt es eine Möglichkeit, im Code zu erkennen, welcher horizontal gespiegelt wurde? ScaleX scheint unverändert zu bleiben.

Der MovieClip wurde über die Flash-Benutzeroberfläche (Bearbeiten->Horizontal spiegeln) horizontal gespiegelt, nicht über Code.

6voto

Decent Dabbler Punkte 22092

Versuchen Sie es:

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

trace( isFlippedHorizontally( yourObject ) );

bearbeiten:
Ich hätte die scaleX des Objekts; jetzt angepasst.

Alternativ dazu:

import fl.motion.MatrixTransformer;

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

trace( isFlippedHorizontally( yourObject ) );

bearbeiten:
Im letzten Beispiel wurde versehentlich die Berechnung für vertikal gespiegelt statt für horizontal gespiegelt durchgeführt.

0voto

localhost Punkte 169

Ich mag fireeyedoy's Lösung mehr für seine Kompaktheit und Einfachheit, aber Sie können auch tun es mit einigen bitmapdata Vergleich:

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!");
}

Dabei wird davon ausgegangen, dass Ihre Filmclips oben links ausgerichtet sind. Falls nicht, müssen Sie beim Zeichnen die entsprechenden tx- und ty-Werte in die Matrix eintragen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X