Zugriff auf Sprites die dynamisch erstellte Sprites (ActionScript 3)
-
Hallo...,
Per Flash ActionScript 3 versuche ich Bilder zur Laufzeit auf der Büne anzuzeigen. Dazu wird per For-Schleife je ein Sprite erstellt, das als Container dient. Anschließend nimmt dieser Container einen weiteren Container auf, in dem das Bild angezeigt wird. Jeder Container bekommt einen eindeutigen Namen (Container und Container_Bild_ jeweils gefolgt von einr fortlaufenden Zahl).
Nach der Schleife möchte ich die Objekte auf der Bühne in ihrer Position (X-Achse) verändern, um sie über die Bühne laufen zu lassen.
Der Flash-Compiler weist jedoch darauf hin, dass meine Container nicht existieren.
1120: Zugriff auf eine nicht definierte Eigenschaft Container2.
1120: Zugriff auf eine nicht definierte Eigenschaft Container_Bild_3.Wie kann man nun auf die erstellten Objekte zugreifen ? Sie werden ja auch auf der Bühne angezeigt.
Ich hoffe die Problem-Beschreibung ist genau und verständlich genug und hoffe, jemand kann mir weiterhelfen...
Hier mal mein Test-\1:
import flash.display.*; import flash.net.URLRequest; import flash.events.Event; var AktuellerContainerName:String; var MeinContainer:Sprite; var MeinBildContainer:Sprite; var BildLader:Loader; for (var Zaehler:uint = 0; Zaehler < 20; Zaehler++) { MeinContainer = new Sprite(); MeinContainer.name = "Container" + Zaehler; MeinContainer.x = Zaehler * 100; MeinContainer.y = 10; addChild(MeinContainer); //Bild laden und anzeigen MeinBildContainer = new Sprite(); MeinBildContainer.name = "Container" + "_Bild_" + Zaehler; MeinBildContainer.x = Zaehler * 150; MeinBildContainer.y = 10; BildLader = new Loader(); var BildPfad:String = "0001.jpg"; var BildPfadReq:URLRequest = new URLRequest(BildPfad); BildLader.load(BildPfadReq); MeinBildContainer.addChild(BildLader); MeinContainer.addChild(MeinBildContainer); } Container2.visible = false; Container_Bild_3.visible = false;
CU==>Eisbeer<==
-
ich will dir ja nicht zu nahe treten, aber vielleicht lernst du mal die programmiergrundlagen...
du brauchst ein array:
var container:Array = new Array();
in das packst du deinen kram rein:
for (var i:int = 0; i < 20; ++i) { var sprite:Sprite = new Sprite(); container[i] = sprite; }
dann kannst du drauf zugreifen:
container[14].x = 5; // setzt x vom 15. sprite auf 5
klar soweit?
threads von dir mit dem thema haben wir jetzt auch genug
-
Okey...
Die Sache mit den Programmiergrundlagen->Bin bei C++ zu Hause. Mit AS hatte ich bislang nichts am Hut.
Das Script wird doch von oben nach unten durchlaufen ? ==>PHP
Nachdem das Objekt (Sprite in dem Fall) auf der Büne liegt und mit einem .name versehen wurde (wohl um es danach anzusprechen) sollte es doch funktionieren.
Wo würde sonst der Sinn in der Eigenschaft name liegen ?
Selbst mit einem EventListener existiert das Objekt nicht, obwohl es ja erstellt wurde, bevor das Event ausgelößt wurde...
==>Eisbeer<==
-
Eisbeer__Not_Loged_In__ schrieb:
Nachdem das Objekt (Sprite in dem Fall) auf der Büne liegt und mit einem .name versehen wurde (wohl um es danach anzusprechen) sollte es doch funktionieren.
Wo würde sonst der Sinn in der Eigenschaft name liegen ?
die eigenschaft "name" von einem DisplayObject hat nichts mit dem namen der variable zu tun, unter dem die instanz angesprochen wird. woher soll der compiler auch einen erst zur laufzeit zugewiesenen namen kennen?
du kannst den namen z.b. bei getChildByName() verwenden.
das steht auch so in der dokumentation, die du vielleicht mal lesen solltest.http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#name