AS 3 Zugriff auf Sprites die zur Laufzeit erstellt wurden
-
Ist bei so einem großen Forum schade.
Kann man wohl nix machen...
==>Eisbeer<==
-
Eisbeer__Not_Loged_In__ schrieb:
Nur wie werden diese Sprites angesprochen? Irgendwie will´s nicht so richtig funktionieren.
das ist keine fehlerbeschreibung.
was genau meinst du mit 'ansprechen'?var sprite:Sprite = new Sprite(); // sprite erstellen sprite.x = 100; // sprite ansprechen
-
habs grad überflogen vielleicht hab ich auch was übersehen aber ..
1. Was genau das Prob ist seh ich auch nicht.
2. Du hast eine Globale Variable und schreibst in deiner foreach schleife für jedes item das du hast immer ein neues Sprite in die variable. Oder nicht?
3. Willst du jetzt nach dem durchlaufen die sprites weiter ansprechen oder nur bei jedem durchlauf einmal? Also ist da ne Temp variable?
4. Wo schreibst du denn den aktuellencontainernamen in die dazugehörige variable? und wieso machst du das ^^
-
import flash.display.*; import flash.net.URLRequest; import flash.events.Event; var myXML:XML; var AktuellerContainerName:String; var MeinContainer:Sprite; var Zaehler:Number = 1; var myLoader:URLLoader = new URLLoader(); myLoader.load(new URLRequest("mainflash.xml")); myLoader.addEventListener(Event.COMPLETE, processXML); function processXML(e:Event):void { myXML = new XML(e.target.data); myXML.ignoreWhitespace = true; myXML.ignoreComments = true; myXML.ignoreProcessingInstructions = true; for each (var item in myXML.produkt) { MeinContainer = new Sprite(); MeinContainer.name = "Container" + Zaehler; MeinContainer.x = Zaehler * 100; MeinContainer.y = 30; addChild(MeinContainer); var BildLader:Loader = new Loader(); var BildPfad:String = "0001.jpg"; var BildPfadReq:URLRequest = new URLRequest(BildPfad); BildLader.load(BildPfadReq); BildLader.contentLoaderInfo.addEventListener(Event.COMPLETE, BildGeladen); //Text1Anzeigen var MeinTextFeld1:TextField = new TextField(); MeinTextFeld1.text = item.@Name.toString(); MeinTextFeld1.x = Zaehler +100; MeinTextFeld1.y = 10; MeinTextFeld1.selectable = false; MeinContainer.addChild(MeinTextFeld1); //Text2Anzeigen var MeinTextFeld2:TextField = new TextField(); MeinTextFeld2.text = item.@Preis.toString();; MeinTextFeld2.x = Zaehler+100; MeinTextFeld2.y = 40; MeinTextFeld2.selectable = false; MeinContainer.addChild(MeinTextFeld2); status_txt.text = myXML.produkt.@Preis; status_txt.appendText(MeinContainer.name); Zaehler++; } //Ende for each } //Ende function processXML function BildGeladen(event:Event):void { MeinContainer.addChild(BildLader.content); }
Der obengenannte AS-Code liest die XML-Datei aus und wirft die Daten in einen Container.
Das funktioniert soweit.Aktuell hänge ich bei der Anzeige eines Bildes, das per Pfad-Angabe in meiner XML steht. Wie könnte man eine Grafik in ein Sprite laden ohne dass folgende Meldung kommt...
1120: Zugriff auf eine nicht definierte Eigenschaft BildLader. (Zeile 64)
Irgendwie umständlich erklärt... SORRY
==>Eisbeer<==
-
ich les da jetzt kurzerhand raus da du bildlader in der schleife anlegst und auserhalb der schleife darauf zugreifen willst ...
-
PRIEST schrieb:
ich les da jetzt kurzerhand raus da du bildlader in der schleife anlegst und auserhalb der schleife darauf zugreifen willst ...
das wäre kein problem. er greift aber sogar aus einer ganz anderen funktion darauf zu.
-
Danke für die Aufmerksamkeit...
habe das Script nun folgender Maßen abgeändert (Rest blieb so):
var AktuellerContainerName:String; var MeinContainer:Sprite; var MeinBildContainer:Sprite; var Zaehler:Number = 1; function BildGeladen(event:Event):void { var MeinBildContainer:Sprite = new Sprite(); //var loader2:URLLoader = URLLoader(event.content); MeinBildContainer.addChild(BildLader.content); MeinContainer.addChild(MeinBildContainer); }
wieso läuft´s bei euch und bei mir nicht ?? Steh´ voll auf´m Schlauch ?!?
Flash sagt mir nur
TypeError: Error #2007: Parameter child darf nicht 'null' sein.
at flash.display::DisplayObjectContainer/addChild()
at 0001undmeinmczusammen0003_fla::MainTimeline/BildGeladen()==>Eisbeer<==
-
immernoch das selbe problem
-
Aktuelles AS:
import flash.display.*; import flash.net.URLRequest; import flash.events.Event; var myXML:XML; var AktuellerContainerName:String; var MeinContainer:Sprite; var MeinBildContainer:Sprite; var Zaehler:Number = 1; var myLoader:URLLoader = new URLLoader(); myLoader.load(new URLRequest("mainflash.xml")); myLoader.addEventListener(Event.COMPLETE, processXML); var BildLader:Loader; function processXML(e:Event):void { myXML = new XML(e.target.data); myXML.ignoreWhitespace = true; myXML.ignoreComments = true; myXML.ignoreProcessingInstructions = true; for each (var item in myXML.produkt) { MeinContainer = new Sprite(); MeinContainer.name = "Container" + Zaehler; MeinContainer.x = Zaehler * 100; MeinContainer.y = 30; addChild(MeinContainer); //Text1Anzeigen var MeinTextFeld1:TextField = new TextField(); MeinTextFeld1.text = item.@Name.toString(); MeinTextFeld1.x = Zaehler + 100; MeinTextFeld1.y = 10; MeinTextFeld1.selectable = false; MeinContainer.addChild(MeinTextFeld1); //Text2Anzeigen var MeinTextFeld2:TextField = new TextField(); MeinTextFeld2.text = item.@Preis.toString(); MeinTextFeld2.x = Zaehler + 100; MeinTextFeld2.y = 40; MeinTextFeld2.selectable = false; MeinContainer.addChild(MeinTextFeld2); //Bild laden und anzeigen MeinBildContainer = new Sprite(); MeinBildContainer.name = "Container" + "_Bild_" + Zaehler; MeinBildContainer.x = Zaehler + 10; MeinBildContainer.y = 40; addChild(MeinBildContainer); BildLader = new Loader(); var BildPfad:String = item.@Grafik.toString(); var BildPfadReq:URLRequest = new URLRequest(BildPfad); BildLader.load(BildPfadReq); BildLader.contentLoaderInfo.addEventListener(Event.COMPLETE, BildGeladen); status_txt.text = myXML.produkt.@Preis; status_txt.appendText(MeinContainer.name); Zaehler++; } //Ende for each } //Ende function processXML function BildGeladen(event:Event):void { MeinBildContainer.addChild(BildLader.content); trace(MeinContainer.name); trace(MeinBildContainer.name); trace(Zaehler); trace("-----"); }
Text wird angezeigt
Bild wird angezeigtNur leider gibt Flash folgendes aus:
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----
Container10
Container_Bild_10
11
-----Die Funktion BildGeladen wird nicht bei jedem Schleifendurchgang aufgerufen..
Jemand einen Tipp ? EventListener ist doch gesetzt...
==>Eisber<==
-
EventListener weglassen und Bild direkt in der Schleife anzeigen...
Vielleicht kann ja jemand was damit anfangen... (ActionScript 3)
import flash.display.*; import flash.net.URLRequest; import flash.events.Event; var myXML:XML; var AktuellerContainerName:String; var MeinContainer:Sprite; var MeinBildContainer:Sprite; var Zaehler:Number = 1; var myLoader:URLLoader = new URLLoader(); myLoader.load(new URLRequest("mainflash.xml")); myLoader.addEventListener(Event.COMPLETE, processXML); var BildLader:Loader; function processXML(e:Event):void { myXML = new XML(e.target.data); myXML.ignoreWhitespace = true; myXML.ignoreComments = true; myXML.ignoreProcessingInstructions = true; for each(var item in myXML.produkt) { MeinContainer = new Sprite(); MeinContainer.name = "Container" + Zaehler; MeinContainer.x = Zaehler * 100; MeinContainer.y = 30; addChild(MeinContainer); //Text1Anzeigen var MeinTextFeld1:TextField = new TextField(); MeinTextFeld1.text = item.@Name.toString(); MeinTextFeld1.x = Zaehler + 100; MeinTextFeld1.y = 10; MeinTextFeld1.selectable = false; MeinContainer.addChild(MeinTextFeld1); //Text2Anzeigen var MeinTextFeld2:TextField = new TextField(); MeinTextFeld2.text = item.@Preis.toString(); MeinTextFeld2.x = Zaehler + 100; MeinTextFeld2.y = 40; MeinTextFeld2.selectable = false; MeinContainer.addChild(MeinTextFeld2); //Bild laden und anzeigen MeinBildContainer = new Sprite(); MeinBildContainer.name = "Container" + "_Bild_" + Zaehler; MeinBildContainer.x = Zaehler * 150; MeinBildContainer.y = 100; BildLader = new Loader(); var BildPfad:String = item.@Grafik.toString(); var BildPfadReq:URLRequest = new URLRequest(BildPfad); BildLader.load(BildPfadReq); MeinBildContainer.addChild(BildLader); addChild(MeinBildContainer); //Statustext anzeigen status_txt.text = myXML.produkt.@Preis; status_txt.appendText(MeinContainer.name); Zaehler++; } //Ende for each } //Ende function processXML
==>Eisbeer<==