Frage

Wie verweisen Sie mit Actionscript 3 auf eine Bitmap auf der Bühne in Flash?

Ich habe eine Bitmap in Flash auf der Bühne und möchte sie am Ende des Films gegen die nächste in der Sequenz austauschen, bevor der Film in einer Schleife läuft.In meiner Bibliothek habe ich 3 für Actionscript exportierte Bilder mit dem Klassennamen img1/img2/img3.So sind meine Ebenen in Flash angeordnet.

layer 5 : mask2:MovieClip
layer 4 : img2:Bitmap
layer 3 : mask1:MovieClip
layer 2 : img1:Bitmap
layer 1 : background:Bitmap

Am Ende des Films möchte ich img1 mit img2 austauschen, damit der Film nahtlos in einer Schleife läuft, dann idealerweise img2 (auf Ebene 4) mit img3 austauschen und so weiter, bis ich am Ende meiner Bilder angelangt bin.

Aber ich kann nicht herausfinden, wie ich auf die Bilder verweisen soll, die bereits (in der Entwurfszeit) auf die Bühne gebracht wurden. Hat jemand eine Idee, wie das geht?

Der Endfilm lädt Bilder hoffentlich dynamisch vom Webserver (ich habe den Code für dieses Bit) und zeigt sie sowie img1/img2/img3 an.

Jede Hilfe wäre dankbar.

BEARBEITEN:

@81bronco , ich habe es versucht, aber der Instanzname ist für Grafiken ausgegraut, ich kann es nur mit Movieclips und Schaltflächen machen.Ich habe es halb zum Laufen gebracht, indem ich sie in Moveclips umgewandelt und die Bilder im Moveclip gelöscht habe, bevor ich ein neues hinzugefügt habe (wobei ich etwas Einfacheres verwendet habe). vanhornRF vorgeschlagen), aber aus irgendeinem seltsamen Grund, wenn die Maske einsetzt, kommen die Bilder, die ich gelöscht habe, für die Maskenanimation zurück.

War es hilfreich?

Lösung

Um auf etwas auf der Bühne zu verweisen, müssen Sie der Bühneninstanz einen Namen geben – und nicht dem Symbol in der Bibliothek einen Klassennamen.

Klicken Sie auf der Bühne auf das Element und sehen Sie sich das Eigenschaftenfenster an.Direkt über den Eingabefeldern für die Abmessungen des Artikels sollte sich ein Texteingabefeld befinden.Geben Sie dort einen Namen ein.

An anderer Stelle in Ihrem Code können Sie dann über seinen Instanznamen auf das Element auf der Bühne verweisen.

Andere Tipps

Es sollte etwa so aussehen:

imageHolder.removeChild( imageIndex )

oder

imageHolder.removeChildByName( imageName )

und danach

imageHolder.addChild( newImage )

Ich würde wahrscheinlich so etwas in Ihrer Dokumentenklasse tun

for(var i:int=0; i<numChildren; i++){
    trace(getChildAt(i),"This is the child at position "+i);
}

Ich mache das, weil ich immer noch in der Flash-IDE programmiere und der Debugger die meiste Zeit so mühsam zum Laufen kommt, dass es einfacher ist, Variablen einfach nachzuverfolgen, sodass Sie entweder diese for-Schleife verwenden können, um die Objektnamen der aktuellen Elemente auszugeben auf Ihrer Bühne, oder verwenden Sie ein Debugger-Programm, um die Objekte ebenfalls zu finden.

Da Sie nun die untergeordneten Elemente haben und wissen, an welchem ​​Index sie sich tatsächlich in der Phase befinden, können Sie sie durch Aufrufen von getChildAt(int) referenzieren, Sie können „removeChildAt(int“), Sie können „addChildAt(displayObject, int)“ und „swapChildrenAt(int, int)“ aufrufen ).Das int in diesen Argumenten würde die Indexposition darstellen, die von Ihrer Trace-Anweisung zurückgegeben wurde, und das displayObject würde offensichtlich alles darstellen, was Sie dem Stage- oder übergeordneten DisplayObject hinzufügen möchten.

Mit diesen 4 Befehlen sollten Sie in der Lage sein, alle Movieclips, die Sie auf der Bühne haben, frei neu anzuordnen, sodass sie scheinbar nahtlos übergehen.

@81bronco Man sollte Ihre Assets auf der Bühne unbedingt benennen, wenn Sie sie eindeutig referenzieren möchten, um Verwirrung zu vermeiden, wenn am Ende viele Elemente auf der Bühne stehen

Hey Re0sless, wenn du diese Elemente von der Bühne entfernst, sind ihnen irgendwelche Event-Listener, Timer oder Loader zugeordnet?All diese Dinge können dazu führen, dass ein Objekt im Flash-Speicher hängen bleibt und nicht ordnungsgemäß entfernt wird.Versuchen Sie nicht nur, das Element zu entfernen, sondern es auch auf Null zu setzen?Manchmal hilft das beim Löschen der Referenzen, damit es ordnungsgemäß zerstört werden kann.

Natürlich könnte es auch etwas Dummes sein, wie zum Beispiel, dass das Entfernen des Elements in einer Instanz das Element nicht auch aus zukünftigen Frames entfernt, aber ich glaube wirklich nicht, dass das der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top