Adobe Flash Problem mit XML in Flash

A

apple_freak

Mitglied
Thread Starter
Dabei seit
08.12.2006
Beiträge
29
Reaktionspunkte
0
Hallo,

mein Problem:

ich möchte, dass man in das xml beliebig viele texte reinschreiben kann und diese dann mit den ebenfalls im xml enthaltenen werten getweent werde, aber leider haut das noch nicht so ganz hin bzw. es passiert gar nichts...
wichtig ist, dass man die verzoegerung auch selbst festlegen kann...

hier der code (da ich mir nicht sicher bin 2 versionen; auf der bühne ist nichts):

erste version:

PHP:
import mx.transitions.Tween; 
import mx.transitions.easing.*; 

var ID:Number; 
var Verzoegerung:Number; 
var ZuOp:Number = 0; 

function Bewegen() { 
    mein_xml = new XML();
	mein_xml.ignoreWhite = true;
	mein_xml.load("inhalt.xml");
	
	this.createEmptyMovieClip(Objekt, this.getNextHighestDepth());
	Objekt.createTextField("objekt_txt", 1, Stage.width/2, (Stage.height/2)-10, 150, 20);
	Objekt.objekt_txt.text = mein_xml.firstChild.childNodes[ZuOp].attributes.Slogan;
	
	clearInterval(ID); 
    Verzoegerung = mein_xml.firstChild.childNodes[ZuOp].attributes.Verzoegerung; 
    var Objekt = mein_xml.firstChild.childNodes[ZuOp].attributes.Objekt; 
    var Eigenschaft = mein_xml.firstChild.childNodes[ZuOp].attributes.Eigenschaft; 
    var Beginn = mein_xml.firstChild.childNodes[ZuOp].attributes.Beginn; 
    var Ziel = mein_xml.firstChild.childNodes[ZuOp].attributes.Ziel; 
    var Dauer = mein_xml.firstChild.childNodes[ZuOp].attributes.Dauer; 
    var my_tween:Object = new Tween(Objekt, Eigenschaft, Elastic.easeOut, Beginn, Ziel, Dauer, true); 
    
    my_tween.onMotionFinished = function() { 
        if(ZuOp++ < mein_xml.firstChild.childNodes.length){ 
        	ID = setInterval(Bewegen, Verzoegerung);
		} 
    }
} 
Bewegen();

zweite version:

PHP:
import mx.transitions.Tween; 
import mx.transitions.easing.*; 

var ID:Number; 
var Verzoegerung:XMLNode; 
var ZuOp:Number = 0; 

function Bewegen() { 
    mein_xml = new XML();
	mein_xml.ignoreWhite = true;
	mein_xml.load("inhalt.xml");
	
	this.createEmptyMovieClip(Objekt, this.getNextHighestDepth());
	Objekt.createTextField("objekt_txt", 1, Stage.width/2, (Stage.height/2)-10, 150, 20);
	Objekt.objekt_txt.text = mein_xml.firstChild.childNodes[ZuOp].attributes.Slogan.toString();
	
	clearInterval(ID); 
    Verzoegerung = mein_xml.firstChild.childNodes[ZuOp].attributes.Verzoegerung; 
    var Objekt:XMLNode = mein_xml.firstChild.childNodes[ZuOp].attributes.Objekt.toString(); 
    var Eigenschaft:XMLNode = mein_xml.firstChild.childNodes[ZuOp].attributes.Eigenschaft.toString(); 
    var Beginn:XMLNode = mein_xml.firstChild.childNodes[ZuOp].attributes.Beginn; 
    var Ziel:XMLNode = mein_xml.firstChild.childNodes[ZuOp].attributes.Ziel; 
    var Dauer:XMLNode = mein_xml.firstChild.childNodes[ZuOp].attributes.Dauer; 
    var my_tween:Object = new Tween(Objekt, Eigenschaft, Elastic.easeOut, Beginn, Ziel, Dauer, true); 
    
    my_tween.onMotionFinished = function() { 
        if(ZuOp++ < mein_xml.firstChild.childNodes.length){ 
        	ID = setInterval(Bewegen, Verzoegerung);
		} 
    }
} 
Bewegen();

inhalt.xml:

PHP:
<?xml version"1.0"?>
<Bilder>
<Inhalt Objekt="Slogan1" Slogan="das ist mein erster text" Eigenschaft="_x" Beginn="20" Ziel="350" Dauer="7" Verzoegerung="1000"></Inhalt>
<Inhalt Objekt="Slogan2" Slogan="das ist mein zweiter text" Eigenschaft="_x" Beginn="40" Ziel="350" Dauer="7" Verzoegerung="2000"></Inhalt>
<Inhalt Objekt="Slogan3" Slogan="das ist mein dritter text" Eigenschaft="_x" Beginn="80" Ziel="350" Dauer="7" Verzoegerung="3000"></Inhalt>
<Inhalt Objekt="Slogan4" Slogan="das ist mein vierter text" Eigenschaft="_x" Beginn="100" Ziel="350" Dauer="7" Verzoegerung="4000"></Inhalt>
</Bilder>

Danke!!:confused:

edit: flash 8
 
Zuletzt bearbeitet:
weiß keiner eine lösung???
 
du musst abwarten, bis dein XML Kram geladen ist:

PHP:
import mx.transitions.Tween;  
import mx.transitions.easing.*;  

var ID:Number;  
var Verzoegerung:Number;  
var ZuOp:Number = 0;  

function Bewegen() {  
    mein_xml = new XML(); 
    mein_xml.ignoreWhite = true; 
    mein_xml.load("inhalt.xml"); 
	mein_xml.onLoad = function(){
		 
		this.createEmptyMovieClip(Objekt, this.getNextHighestDepth()); 
		Objekt.createTextField("objekt_txt", 1, Stage.width/2, (Stage.height/2)-10, 150, 20); 
		Objekt.objekt_txt.text = mein_xml.firstChild.childNodes[ZuOp].attributes.Slogan; 
		 
		clearInterval(ID);  
		Verzoegerung = mein_xml.firstChild.childNodes[ZuOp].attributes.Verzoegerung;  
		var Objekt = mein_xml.firstChild.childNodes[ZuOp].attributes.Objekt;  
		var Eigenschaft = mein_xml.firstChild.childNodes[ZuOp].attributes.Eigenschaft;  
		var Beginn = mein_xml.firstChild.childNodes[ZuOp].attributes.Beginn;  
		var Ziel = mein_xml.firstChild.childNodes[ZuOp].attributes.Ziel;  
		var Dauer = mein_xml.firstChild.childNodes[ZuOp].attributes.Dauer;  
		var my_tween:Object = new Tween(Objekt, Eigenschaft, Elastic.easeOut, Beginn, Ziel, Dauer, true);  
		 
		my_tween.onMotionFinished = function() {  
			if(ZuOp++ < mein_xml.firstChild.childNodes.length){  
				ID = setInterval(Bewegen, Verzoegerung); 
			}  
		} 
	}
}  
Bewegen();
 
Besser wäre übrigens, wenn du dein XML ausserhalb der Funktion "Bewegen" lädst. Ansonsten holst du dir bei jedem Interval deine XML Datei neu, du hast also alle paar Sekunden einen Http Request der gar nicht notwenig wäre.
 
du musst abwarten, bis dein XML Kram geladen ist:

PHP:
import mx.transitions.Tween;  
import mx.transitions.easing.*;  

var ID:Number;  
var Verzoegerung:Number;  
var ZuOp:Number = 0;  

function Bewegen() {  
    mein_xml = new XML(); 
    mein_xml.ignoreWhite = true; 
    mein_xml.load("inhalt.xml"); 
	mein_xml.onLoad = function(){
		 
		this.createEmptyMovieClip(Objekt, this.getNextHighestDepth()); 
		Objekt.createTextField("objekt_txt", 1, Stage.width/2, (Stage.height/2)-10, 150, 20); 
		Objekt.objekt_txt.text = mein_xml.firstChild.childNodes[ZuOp].attributes.Slogan; 
		 
		clearInterval(ID);  
		Verzoegerung = mein_xml.firstChild.childNodes[ZuOp].attributes.Verzoegerung;  
		var Objekt = mein_xml.firstChild.childNodes[ZuOp].attributes.Objekt;  
		var Eigenschaft = mein_xml.firstChild.childNodes[ZuOp].attributes.Eigenschaft;  
		var Beginn = mein_xml.firstChild.childNodes[ZuOp].attributes.Beginn;  
		var Ziel = mein_xml.firstChild.childNodes[ZuOp].attributes.Ziel;  
		var Dauer = mein_xml.firstChild.childNodes[ZuOp].attributes.Dauer;  
		var my_tween:Object = new Tween(Objekt, Eigenschaft, Elastic.easeOut, Beginn, Ziel, Dauer, true);  
		 
		my_tween.onMotionFinished = function() {  
			if(ZuOp++ < mein_xml.firstChild.childNodes.length){  
				ID = setInterval(Bewegen, Verzoegerung); 
			}  
		} 
	}
}  
Bewegen();

da passiert aber immer noch nichts...
 
wahrscheinlich weil der Scope geändert hat innerhalb von onLoad. this nimmt jetzt nämlich bezug auf das XML Objekt und nicht mehr die aktuelle Ebene.

ci
 
dann müsste es ja so funktionieren, geht aber nicht...

PHP:
import mx.transitions.Tween;   
import mx.transitions.easing.*;   

var ID:Number;   
var Verzoegerung:Number;   
var ZuOp:Number = 0;   

mein_xml = new XML();  
mein_xml.ignoreWhite = true;  
mein_xml.load("inhalt.xml"); 

function Bewegen() {   
     mein_xml.onLoad = function(){ 
          
        this.createEmptyMovieClip(Objekt, this.getNextHighestDepth());  
        Objekt.createTextField("objekt_txt", 1, Stage.width/2, (Stage.height/2)-10, 150, 20);  
        Objekt.objekt_txt.text = mein_xml.firstChild.childNodes[ZuOp].attributes.Slogan;  
          
        clearInterval(ID);   
        Verzoegerung = mein_xml.firstChild.childNodes[ZuOp].attributes.Verzoegerung;   
        var Objekt = mein_xml.firstChild.childNodes[ZuOp].attributes.Objekt;   
        var Eigenschaft = mein_xml.firstChild.childNodes[ZuOp].attributes.Eigenschaft;   
        var Beginn = mein_xml.firstChild.childNodes[ZuOp].attributes.Beginn;   
        var Ziel = mein_xml.firstChild.childNodes[ZuOp].attributes.Ziel;   
        var Dauer = mein_xml.firstChild.childNodes[ZuOp].attributes.Dauer;   
        var my_tween:Object = new Tween(Objekt, Eigenschaft, Elastic.easeOut, Beginn, Ziel, Dauer, true);   
          
        my_tween.onMotionFinished = function() {   
            if(ZuOp++ < mein_xml.firstChild.childNodes.length){   
                ID = setInterval(Bewegen, Verzoegerung);  
            }   
        }  
    } 
}   
Bewegen();
 
so meinte ich das, und bitte schau dir mal die Funktion trace(), die ist ganz nützlich bei sowas ;)

PHP:
import mx.transitions.Tween;   
import mx.transitions.easing.*;   

var ID:Number;   
var Verzoegerung:Number;   
var ZuOp:Number = 0;   
var mein_xml = new XML();  
    mein_xml.ignoreWhite = true;  
    mein_xml.load("test.xml");  
    mein_xml.onLoad = function(){ 
		Bewegen();
	}
   

function Bewegen() {   
		this.createEmptyMovieClip("Objekt", this.getNextHighestDepth());         
        Objekt.createTextField("objekt_txt", 1, Stage.width/2, (Stage.height/2)-10, 150, 20);  
        Objekt.objekt_txt.text = mein_xml.firstChild.childNodes[ZuOp].attributes.Slogan;  
          
        clearInterval(ID);   
        Verzoegerung = mein_xml.firstChild.childNodes[ZuOp].attributes.Verzoegerung;   
        var Objekt = mein_xml.firstChild.childNodes[ZuOp].attributes.Objekt;   
        var Eigenschaft = mein_xml.firstChild.childNodes[ZuOp].attributes.Eigenschaft;   
        var Beginn = mein_xml.firstChild.childNodes[ZuOp].attributes.Beginn;   
        var Ziel = mein_xml.firstChild.childNodes[ZuOp].attributes.Ziel;   
        var Dauer = mein_xml.firstChild.childNodes[ZuOp].attributes.Dauer;   
        var my_tween:Object = new Tween(Objekt, Eigenschaft, Elastic.easeOut, Beginn, Ziel, Dauer, true);   
          
        my_tween.onMotionFinished = function() {   
            if(ZuOp++ < mein_xml.firstChild.childNodes.length){   
                ID = setInterval(Bewegen, Verzoegerung);  
            }   
        }  
}
 
schonmal besser danke!!!

aber jetzt ist das problem, dass ja die instanz des movieclips jedesmal durch die variable geändert werden soll, nämlich so wie es in der xml steht (slogan1,slogan2,...).
wenn man das hier in anführungszeichen setzt kann das doch gar nicht gehen,oder???

this.createEmptyMovieClip("Objekt", this.getNextHighestDepth());

denn die texte sollen ja schließlich getweent werden...
 
Zurück
Oben Unten