2012-04-10 20 views
2

Ich realisiere, das ist eine total neue Frage, aber es macht mich verrückt ...Wie entferne ich programmgesteuert eine Maske, die in Flash Professional definiert wurde?

In Flash Professional habe ich einen Film, sagen 1000px hoch und 50px breit. Ich habe es innerhalb (unter) einer Maskenebene, wo die Maske 100px hoch und 50px breit ist. In meinem Programm verschiebe ich den Movieclip vertikal und wie erwartet ist er so maskiert, dass ich nur 100px vertikal sehe.

Meine Frage ist: Wie entferne ich die Maske aus meinem Movieclip? Beim Debuggen des Movieclips in Flash Builder wird die Eigenschaft .mask auf null gesetzt. Aber es ist maskiert ...

Was vermisse ich?

Vielen Dank im Voraus,

Greg

+0

haben immer noch keine Antwort zu dieser, und leider kann ich nicht sogar Posts in Adobe-Foren, da seit gestern (15.05.2014) Adobe Cloud Services weltweit nicht verfügbar sind. Ich kann mich nicht in Foren oder Anwendungen einloggen. Episches Versagen. Ich werde hier eine Antwort posten, sobald ich herausfinde, was mit Autoritäten-Masken passiert. – Triynko

Antwort

0

Überprüfen Sie, ob die Maske für die Eltern Ihrer MovieClip- über Actionscript ist: set es

MovieClip(movicClipInstanceName_mc.parent).mask 

und wenn es dann ... .mask = null; zu

Gewöhnlich jede Maske, die ich in der Zeitleiste deklariere, mache ich nicht in meinem AS-Code durcheinander, da ich es für mich als dauerhafte Bedingung ansehe. Ich würde vorschlagen, die Maskeneigenschaft innerhalb des AS-Codes selbst zu setzen, wenn Sie es später programmatisch ändern wollen.

Für mich macht es so viel sauberer und ich habe mehr Kontrolle darüber.

+0

Vielen Dank für Ihre Antwort, leider ist die Maske der Eltern auch null. Der Elternteil ist in diesem Fall der Hauptfilmclip/Bühne. Mein maskierter Movieclip hat einen Instanznamen und ich habe sogar versucht, die Maske selbst zu einem Movieclip zu machen. Kein Glück ... eine Maskenebene scheint überhaupt nicht der .mask-Eigenschaft zu entsprechen (soweit ich das beurteilen kann) – Greg

0

geben einen Instanznamen zu den großen Movieclip (sagen wir big_mc) und dann

big_mc.mask = null; 
+0

Danke .. der Movieclip hatte bereits einen Instanznamen. .mask ist null dafür. Siehe meine Antwort an ToddBFisher für weitere Informationen. – Greg

1

Greg ist richtig. Sie würden denken, dass Sie auf die Maske zugreifen können, die in Flash IDE über die mask-Eigenschaft von DisplayObject festgelegt wurde, aber nicht. In Flash gesetzte Masken sind in ActionScript immer null.

Die Hacky-Version zu entfernen Maske ist, dass Sie

displayObjectWithMaskOnIt.parent.removeChild(displayObjectWithMaskOnIt) 

und dann

displayObjectWithMaskOnIt.parent.addChild(displayObjectWithMaskOnIt). 
+0

Bessere Lösung ist, die Maske selbst aus der Anzeigeliste zu entfernen. – Gio

+0

Das Problem ist die Maske ist nicht in der Anzeigeliste. Zum Beispiel habe ich ein Symbol mit einer Bitmap (ein Sprite-Blatt mit Symbolen) definiert und dann wird es von einer Ebene maskiert, die nur ein Rechteck hat. Zur Laufzeit hat die Instanz eine Null-Maske und die einzigen darin enthaltenen Kinder sind zwei Shape-Objekte ... also weiß ich nicht einmal, wie die Bitmap angezeigt wird, es sei denn, sie wurde zur Kompilierungszeit in eine Art statisches Shape-Objekt gerastert . Es gibt offensichtlich einige böse und mysteriöse Optimierungen. – Triynko

0

Von http://forum.starling-framework.org/topic/weird-how-to-read-mask-info-from-an-swf-file

versuchen können, ist es sehr einfach: die Maske Eigenschaft ist ein völlig andere Maske als die Timeline-Masken.

Die Maske Eigenschaft können Sie ein beliebiges Objekt als Maske für andere Objekt verwenden (nur nicht vergessen, sie auf dem gleichen Anzeigebaum oder Sachen zu setzen unsinnig bekommen).

Die Timeline-Masken bezeichnen einen bestimmten Bereich von Tiefen als maskiert von einem bestimmten Objekt.

Die zwei Systeme kommunizieren überhaupt nicht, aber sie machen die gleiche Arbeit.

Sie besser bringen Sie Ihre swf-Parser oder jsfl, wenn Sie Zugriff auf die Timeline-Masken möchten.

So verwenden Timeline-Masken einen anderen Mechanismus, der von der Maskeneigenschaft getrennt ist. Deshalb können Sie nicht darauf zugreifen. Wie andere bereits erwähnt haben, können Sie möglicherweise Zeitachsenmasken indirekt deaktivieren, indem Sie untergeordnete Elemente entfernen und hinzufügen, aber wenn Sie die SWF-Datei nicht analysieren, kann ich nicht feststellen, ob das Objekt in der ersten mit einer Zeitleistenmaske maskiert ist Ort.

0

Ich weiß, das ist nicht die Antwort, die Sie suchen, aber das wird die Maske entfernen. Wenn Sie einen separaten Clip erstellen, die Maske drücken auf sie die Maske von dem Objekt entfernen wird es vorher war maskiert,

zum Beispiel ...

object1.mask = mask1;

dann fügen Sie Ihren Code dem neuen Objekt hinzu object2.mask = mask1;

da ein Objekt nur 1 Objekt zu einer Zeit maskieren kann es jetzt die neue Objektmaske, effektiv die Maske aus dem alten Objekt entfernen