Suche…


Syntax

  1. addChild(child) - fügt der addChild(child) Baumstruktur dieses Objekts ein neues Element als oberstes Element hinzu.
  2. addChildAt(child, index) - fügt der addChildAt(child, index) Baumstruktur dieses Objekts an einer angegebenen Position ein neues Element hinzu. Das unterste Element hat den Index 0.
  3. getChildAt(index) - gibt ein Kind mit dem angegebenen Index zurück.
  4. getChildIndex(child) gibt den Index eines direkten getChildIndex(child) Objekts dieses Objekts zurück. Ansonsten wird eine Ausnahme ausgelöst.
  5. removeChild(child) - removeChild(child) das angegebene direkte removeChild(child) Objekt aus dem removeChild(child) Baum dieses Objekts. Löst eine Ausnahme aus, wenn das übergeordnete Elternteil nicht this .
  6. removeChildAt(index) - removeChildAt(index) ein durch den Index ausgewähltes removeChildAt(index) anstelle der Referenz. Löst eine Ausnahme aus, wenn der untergeordnete Baum nicht so breit ist.
  7. removeChildren(beginIndex:int = 0, endIndex:int = 0x7fffffff)) - in Flash Player 11 hinzugefügt, entfernt eine Untermenge von removeChildren(beginIndex:int = 0, endIndex:int = 0x7fffffff)) nach Indexbereich oder alle removeChildren(beginIndex:int = 0, endIndex:int = 0x7fffffff)) , wenn sie ohne Parameter aufgerufen werden.
  8. setChildIndex(child,index) - ändert den Index des setChildIndex(child,index) auf den neuen Wert, wobei alle setChildIndex(child,index) verschoben werden, um den freigegebenen Bereich zu belegen.
  9. swapChildren(child1,child2) - tauscht die Positionen der beiden Kinder in der Anzeigeliste, ohne die Positionen anderer Kinder zu beeinflussen.
  10. swapChildrenAt(index1,index2) - tauscht swapChildrenAt(index1,index2) Kinder anhand ihrer Indizes aus.

Bemerkungen

Die Anzeigeliste ist eigentlich ein Baum und wird mit dem Tiefenalgorithmus visualisiert. Alle zuvor aufgelisteten Objekte werden früher angezeigt und können durch später aufgeführte Objekte verdeckt werden. Alle Techniken, die für einen Baum verwendet werden können, können auf das Arbeiten mit der Anzeigeliste angewendet werden.

Einführung in die Anzeigeliste

In AS3 sind Anzeigeelemente erst sichtbar, wenn sie der Anzeigeliste hinzugefügt werden.

Die AIR- / Flash-Laufzeitumgebung verfügt über eine hierarchische Anzeigestruktur (Eltern-Kind-Beziehung, in der Kinder eigene Kinder haben können), wobei die stage das übergeordnete Element der obersten Ebene ist.

Um der Anzeigeliste etwas hinzuzufügen, verwenden Sie addChild oder addChildAt . Hier ein grundlegendes Beispiel für das Zeichnen eines Kreises und das Hinzufügen zu der Anzeigeliste:

var myCircle:Shape = new Shape();
        
myCircle.graphics.beginFill(0xFF0000); //red
myCircle.graphics.drawCircle(25, 25, 50);
myCircle.graphics.endFill();
        
this.addChild(myCircle); //add the circle as a child of `this`

Um das Objekt im obigen Beispiel zu sehen, muss sich this (der Kontext des Codes) auch auf der Anzeigeliste befinden, ebenso wie alle übergeordneten Elemente. In AS3 ist die stage die oberste Mutter.

Anzeigeobjekte können nur ein übergeordnetes Element haben. Wenn ein Kind bereits über ein Elternteil verfügt und Sie es einem anderen Objekt hinzufügen, wird es aus dem vorherigen übergeordneten Objekt entfernt.

Z-Reihenfolge / Schichtung

Angenommen, Sie haben den Code aus dem vorherigen Beispiel repliziert, so dass Sie 3 Kreise hatten:

var redCircle:Shape = new Shape();
redCircle.graphics.beginFill(0xFF0000); //red
redCircle.graphics.drawCircle(50, 50, 50); //graphics.endFill is not required

var greenCircle:Shape = new Shape();
greenCircle.graphics.beginFill(0x00FF00); //green
greenCircle.graphics.drawCircle(75, 75, 50);
        
var blueCircle:Shape = new Shape();
blueCircle.graphics.beginFill(0x0000FF); //blue
blueCircle.graphics.drawCircle(100, 100, 50);

this.addChild(redCircle); 
this.addChild(greenCircle); 
this.addChild(blueCircle); 

Da die addChild Methode das Kind zusätzlich zu addChild anderen Elementen in demselben übergeordneten addChild hinzufügt, erhalten Sie dieses Ergebnis, wenn die Elemente in derselben Reihenfolge angeordnet sind, in der Sie addChild verwenden:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie addChildAt dass ein Kind relativ zu seinen Geschwistern unterschiedlich angeordnet ist, können Sie addChildAt . Mit addChildAt Sie einen weiteren Parameter, der den Index (Z-Reihenfolge) angibt, in dem sich das Kind befinden soll. 0 ist die unterste Position / Ebene.

this.addChild(redCircle); 
this.addChild(greenCircle); 
this.addChildAt(blueCircle,0); //This will add the blue circle at the bottom

Geben Sie hier die Bildbeschreibung ein

Nun ist der blaue Kreis unter seinen Geschwistern. Wenn Sie später den Index eines setChildIndex ändern möchten, können Sie die setChildIndex Methode (für das übergeordnete setChildIndex ) verwenden.

this.setChildIndex(redCircle, this.numChildren - 1); //since z-index is 0 based, the top most position is amount of children less 1.

Dadurch wird der rote Kreis neu angeordnet, so dass er über allem anderen steht. Der obige Code liefert das gleiche Ergebnis wie this.addChild(redCircle) .

Anzeigeobjekte entfernen

Um Objekte zu entfernen, verfügen Sie über die umgekehrten removeChild und removeChildAt Methoden sowie über die removeChildren Methode.

removeChild(redCircle); //this will take redCircle off the display list

removeChildAt(0); //this will take the bottom most object off the display list 

removeChildren(); //this will clear all children from the display list

removeChildren(1); //this would remove all children except the bottom most

removeChildren(1,3); //this would remove the children at indexes 1, 2 & 3

Veranstaltungen

Wenn ein Kind der Anzeigeliste hinzugefügt wird, werden einige Ereignisse für dieses Kind ausgelöst.

  • Event.ADDED
  • Event.ADDED_TO_STAGE

Umgekehrt gibt es auch die Remove-Events:

  • Event.REMOVED
  • Event.REMOVED_FROM_STAGE

Adobe Animate / Flash Professional

Wenn Sie FlashProfessional / Adobe Animate-Zeitleisten verwenden, werden durch das Hinzufügen von Elementen zur Zeitleiste die Nuancen der Anzeigeliste automatisch behandelt. Sie wurden automatisch von der Timeline hinzugefügt und aus der Anzeigeliste entfernt.

Es ist jedoch gut zu wissen, dass:

Wenn Sie die Abstammung eines durch die Zeitleiste erstellten Anzeigeobjekts (mithilfe von addChild / setChildIndex) durch Code bearbeiten, wird dieses untergeordnete Element nicht mehr automatisch von der Zeitleiste entfernt und muss über Code entfernt werden.

Schichtung

Es kann Situationen geben, in denen Sie entscheiden, dass sich ein Satz von Anzeigeobjekten immer über einem anderen Satz von Objekten befinden sollte, z. B. Pfeile über Kopf, Explosionen über etwas, das gerade explodiert ist usw. Um dies so einfach wie möglich zu machen, müssen Sie es festlegen und erstellen Sie eine Gruppe von Sprite , ordnen Sie sie in der Reihenfolge von unten nach oben an und fügen Sie dann alle Objekte der Gruppe "oben" einer Ebene hinzu, die über der Ebene für Objekte der Gruppe "unterhalb" liegt.

var monsters:Vector.<Monster>;
var bullets:Vector.<Bullet>; // desired: bullets strictly above monsters
var monsterLayer:Sprite=new Sprite();
var bulletLayer:Sprite=new Sprite();
addChild(monsterLayer);
addChild(bulletLayer);

Wenn Sie ein Monster zur Anzeigeliste hinzufügen, fügen Sie es zu monsterLayer . Wenn Sie ein Bullet hinzufügen, fügen Sie es zu bulletLayer , um den gewünschten Effekt zu erzielen.

Entfernen Sie alle Objekte aus der Anzeigeliste

Wenn Sie Flash Player 11+ als Ziel verwenden, können Sie mit der integrierten removeChildren- Methode alle untergeordneten Elemente entfernen:

removeChildren(); //a start and end index can be passed 

Für ältere Anwendungen kann dasselbe mit einer Schleife erreicht werden:

while (numChildren > 0) {
    removeChildAt(0);
}

Übergang von Frames zu manueller Inhaltsumschaltung

Ein Flash-Entwickler verwendet Frames, da sie in Flash Player nativ verfügbar sind, um verschiedene Bildschirme ihrer Anwendung zu hosten (meistens handelt es sich dabei um ein Spiel). Möglicherweise stolpern sie über ein Problem, dass etwas nicht funktioniert, weil sie Frames verwendet haben und die daraus resultierenden Schwierigkeiten übersehen haben. Sie suchen nach Wegen, sowohl ihre Frame-Struktur beizubehalten als auch das Hindernis für die Verwendung von Frames mit ihren Komplikationen zu beseitigen. Die Lösung besteht darin, Sprite Nachkommenklassen zu verwenden oder Frames als MovieClip mit einem einzigen Frame (für diejenigen, die in Adobe Flash CS entworfen wurden) zu exportieren und den Inhalt manuell mit addChild() und removeChild() wechseln.

Die Manager-Klasse sollte alle untergeordneten Frame-Klassen bereithalten. Wenn ein Übergang aufgerufen wird, kann eine ähnliche Funktion verwendet werden:

var frames:Vector.<DisplayObject>; // this holds instances to ALL children
var currentFrame_alt:int; // current frame. Can't use the property
function changeFrame(frame:int):void {
    removeChild(frames[currentFrame_alt]);
    addChild(frames[frame]);
    currentFrame_alt=frame;
}

Alle Kinder können Ereignisse mit Event.ADDED_TO_STAGE das als Einstiegspunkt für alles dient, nachdem gotoAndStop() diesen Frame anvisiert hat, auslösen und abhören. Alle ausgehenden Übergänge können als Ereignisse basierend auf Zeichenfolgen codiert werden, die in der Main Klasse abgehört werden das führt dann den Übergang durch.

frames[0].addEventListener("startGame",startGame); // assuming frame 0 is a "Play" button
function startGame(e:Event):void {
    changeFrame(1); // switch to frame 1 - will display frames[1]
}

Natürlich sollte der Satz von Saiten vordefiniert sein. Zum Beispiel könnte der Intro-Bildschirm zwei Schaltflächen zum Starten des Spiels haben, beispielsweise "Spiel starten" und "Start stummgeschaltet". Die Schaltflächen sollten unterschiedliche Ereignisse auslösen, die dann behandelt werden anders in der Managerklasse.

Dieses Muster kann so tief gehen, wie Sie es brauchen. Wenn ein Frame des Projekts einen MovieClip mit mehreren Frames enthält, kann er mit dieser Methode auch in Sprites entkoppelt werden.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow