Bilder seriell aus XML-Datei laden

intercorni

Erfahrenes Mitglied
Aus einer XML-Datei lade ich die Navigation (box_links) und Inhalte (box_inhalt, box_bild, , box_beschreibung) in ScrollPaines.
Die XML-Datei (website1.xml) ist so aufgebaut:
Code:
<?xml version="1.0"?>
<inhalts_resources>
    <resource type="inhalt1">
        <linktitle>Link1</linktitle>
        <beschreibung>Hier ist die Beschreibung1</beschreibung>
        <inhalt>Hier steht der Inhaltstext 1</inhalt> 
	<bild>pic1.jpg</bild><bild>pic2.jpg</bild><bild>pic3.jpg</bild>       
    </resource>
</inhalts_resources>

Im Pfad meinXML.childNodes[0].childNodes[0].attributes.bild
sind mehrere Bilder, wobei ich ersteinmal nur eines in die
ScrollPaine (box_bild) einlesen lasse.
Ich hätte jedoch gerne, dass Flash überprüft, wieviele Bilder vorhanden sind
und diese dann nach ca. 3 Sekunden automatisch in die ScrollPaine
einliest und jeweils ein- und ausblendet.
Das bisherige AS dazu:
Code:
meinXML = new XML();
meinXML.ignoreWhite = true;
meinXML.load("website1.xml");
meinXML.onLoad = function(status) {
        if (status) {
                xmlpfad = this.firstChild.childNodes;
                createEmptyMovieClip("label_mc", 1);
                for (var i = 0; i < xmlpfad.length; i++) {
                        text_label = xmlpfad[i].firstChild.firstChild;
                        label_mc.attachMovie("LClip", "LClip" + i, i);
                        label_mc["LClip" + i].textlabel.autoSize = "left";
                        label_mc["LClip" + i].textlabel.htmlText = text_label;
                        label_mc["LClip" + i]._y = label_mc["LClip" + i]._height * i * 1.1;
                        label_mc["LClip" + i].daten = xmlpfad[i].firstChild.nextSibling.nextSibling.firstChild;
                        //
                        // 
                        //
                        label_mc["LClip" + i].beschreibung = xmlpfad[i].childNodes[1].firstChild.nodeValue;
                        label_mc["LClip" + i].inhalt = xmlpfad[i].childNodes[2].firstChild.nodeValue;
                        label_mc["LClip" + i].bild = xmlpfad[i].childNodes[3].firstChild.nodeValue;
						label_mc["LClip" + i].willkommen = xmlpfad[i].childNodes[3].firstChild.nodeValue;
                        //
                        //
                        //
                        label_mc["LClip" + i].onRelease = function() {
                                //
                                // Beschreibung und Inhalt wird in den Scrollpanes angezeigt
                                // 
                                var clip = _root.attachMovie("LClip2", "LClipBeschreibung", 1000);
                                clip.textlabel.htmlText = this.beschreibung;
                                _root.box_beschreibung.setScrollContent(clip);
								//
                                //
								//
                                var clip2 = _root.attachMovie("LClip", "LClipInhalt", 1001);
                                clip2.textlabel.htmlText = this.inhalt;
                                _root.box_inhalt.setScrollContent(clip2);
								//
                                // Refreshing der ScrollPaine nach 2 Frames
                                // 
								var c = 0;
								this.onEnterFrame = function() {
    							if (c > 1) {
        						_root.box_inhalt.refreshPane();
								_root.box_beschreibung.refreshPane();
        						delete this.onEnterFrame;
    							}
    							c ++;
								} 
                                //
								//
								//
								_root.box_bild.loadScrollContent(this.bild);
                                //
								//
                                //

                        };
                }
                box_links.setScrollContent(label_mc);
                
        }
};

Wie mache ich nun ein Abfrage (setInterval?) um die Pics einzuladen?

Gruss,

Cornel
 
Hi,

ist immer schwer (bzw. sehr Zeitaufwändig), sich in einen nackten Code einzulesen und dort zu debuggen - zumal ich mich z.B. nicht mit den Komponenten wie ScrollPane befasse.

Kannst Du die beteiligenten Dateien vielleicht einmal posten (.fla und .xml)? Mit ein paar trace-Aktionen kann man sich dann sehr fix einen Überblick verschaffen. ;)

Gruß
.
 
Hi,

wie Du die Bilder nacheinander (in Intervallen) anzeigst, kann ich Dir sagen:
  • Am Anfang drei Variablen definieren:
PHP:
var iv = 0; // Intervallobjekt
var amt = 0; // Anzahl Bilder
var current = 0; // aktuelles Bild
  • Nach dem Einlesen der XML-Datei das erste Bild anzeigen und das Intervall definieren:
PHP:
_root.box_bild.loadScrollContent(label_mc["LClip0"].bild;
iv = setInterval(nextPic, 3000);
  • Und am Ende noch eine Funktion, die die Bilder austauscht:
PHP:
function nextPic() {
	current ++;
	if (current < amt) {
		_root.box_bild.loadScrollContent(label_mc["LClip" + current].bild);
	} else {
		clearInterval(iv);
	}
}

wenn Du nun die Bilder sanft ein- und ausblenden willst, kannst Du das prinzipiell mit einer onEnterFrame-Methode in der Funktion "nextPic" machen. Ich habe aber keine Ahnung, wie man a) eine Referenz auf den Scroll-Content der 6er ScrollPanes bekommt und b) weiß ich nicht, ob Du diesen dann über ._alpha transformieren kannst. Was die Komponenten anbelangt, sollte sich vielleicht jemand melden, der gerne und oft damit arbeitet. ;)


Gruß
.
 
Ersteinmal vielen Dank für Deine Anmerkungen. Jetzt habe ich erstmal genug Stoff, um das Einlesen der Pics auszuprobieren.

Viele Grüße,

Cornel
 
Hm, irgendwie scheint ein Pfad noch nicht zu stimmen, denn ich
bekomme eine Fehelrmeldung:
Error opening URL "file:///F|/dreamweb/test/flash/xml/funktionierend/_level0.label_mc.LClip0"

Hier mal das komplette AS:
Code:
var iv = 0; // Intervallobjekt
var amt = 0; // Anzahl Bilder
var current = 0; // aktuelles Bild 
meinXML = new XML();
meinXML.ignoreWhite = true;
meinXML.load("website1.xml");
meinXML.onLoad = function(status) {
        if (status) {
                xmlpfad = this.firstChild.childNodes;
                createEmptyMovieClip("label_mc", 1);
                for (var i = 0; i < xmlpfad.length; i++) {
                        text_label = xmlpfad[i].firstChild.firstChild;
                        label_mc.attachMovie("LClip", "LClip" + i, i);
                        label_mc["LClip" + i].textlabel.autoSize = "left";
                        label_mc["LClip" + i].textlabel.htmlText = text_label;
                        label_mc["LClip" + i]._y = label_mc["LClip" + i]._height * i * 1.1;
                        label_mc["LClip" + i].daten = xmlpfad[i].firstChild.nextSibling.nextSibling.firstChild;
                        //
                        // 
                        //
                        label_mc["LClip" + i].beschreibung = xmlpfad[i].childNodes[1].firstChild.nodeValue;
                        label_mc["LClip" + i].inhalt = xmlpfad[i].childNodes[2].firstChild.nodeValue;
                        label_mc["LClip" + i].bild = xmlpfad[i].childNodes[3].firstChild.nodeValue;
						label_mc["LClip" + i].willkommen = xmlpfad[i].childNodes[3].firstChild.nodeValue;
                        //
                        //
                        //
                        label_mc["LClip" + i].onRelease = function() {
                                //
                                // Beschreibung und Inhalt wird in den Scrollpanes angezeigt
                                // 
                                var clip = _root.attachMovie("LClip2", "LClipBeschreibung", 1000);
                                clip.textlabel.htmlText = this.beschreibung;
                                _root.box_beschreibung.setScrollContent(clip);
								//
                                //
								//
                                var clip2 = _root.attachMovie("LClip", "LClipInhalt", 1001);
                                clip2.textlabel.htmlText = this.inhalt;
                                _root.box_inhalt.setScrollContent(clip2);
								//
                                // Refreshing der ScrollPaine nach 2 Frames
                                // 
								var c = 0;
								this.onEnterFrame = function() {
    							if (c > 1) {
        						_root.box_inhalt.refreshPane();
								_root.box_beschreibung.refreshPane();
        						delete this.onEnterFrame;
    							}
    							c ++;
								} 
                                //
								//
								//
								
								_root.box_bild.loadScrollContent(label_mc["LClip0"]).bild;
								iv = setInterval(nextPic, 3000); 
                                //
								//
                                //

                        };
                }
                box_links.setScrollContent(label_mc);
                
        }
};
//
// ScrollPaine-Eigenschaften
//
box_inhalt.boundingBox_mc._alpha = 0; 
box_inhalt.depthChild0._visible = false;

function nextPic() {
    current ++;
    if (current < amt) {
        _root.box_bild.loadScrollContent(label_mc["LClip" + current].bild);
    } else {
        clearInterval(iv);
    }
}

Habe ich vielleicht etwas falsch gesetzt?

Cornel
 
Hi,

Du musst den Aufruf des Intervalles an das Ende der onLoad-Funktion setzen (ich seh auf den ersten Blick nicht, wo Du es stehen hast, aber es schaut aus wie in einem Handler oder einer onEnterFrame...).

Übrigens habe ich eben vergessen, eines zu sagen: Die Variable "amt" muss natürlich hochgezählt werden, und zwar hier:
Code:
label_mc["LClip" + i].inhalt = xmlpfad[i].childNodes[2].firstChild.nodeValue;
amt ++;

Gruß
.
 
Zurück