Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-08-2007, 14:30   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2006
Beiträge: 2
viele XML-Dateien dynamisch laden

Hallo

Ich möchte viele (ca. 50+) XML-Dateien dynamisch laden (map0.xml, map1.xml, map2.xml... ; momentan sind es erst 5 Dateien, es werden aber noch weitere hinzukommen)


Anstatt für jede Datei so viel zu schreiben (was auch funktioniert, aber vieeele Zeilen bräuchte und ausserdem relativ unelegant ist )
PHP-Code:
xmlMap0 = new XML();
xmlMap0.ignoreWhite true;
xmlMap0.load("maps/map0.xml");
xmlMap0.onLoad = function(success) {
    if (
success) {
        
myMap0 = new Array();
        var 
rows xmlMap0.firstChild.lastChild.childNodes[0].attributes.rows;
        var 
columns xmlMap0.firstChild.lastChild.childNodes[0].attributes.columns;
        for (var 
0j<rowsj++) {
            
myMap0[j] = new Array();
            for (var 
0k<columnsk++) {
                if (
xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.door) {
                    var 
oneDoor "Tile"+xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.frame;
                    var 
nextMap xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.map;
                    var 
nextX xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.heroX;
                    var 
nextY xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.heroY;
                    var 
nextReal xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.real;
                    
map[oneDoor] = function () {
                    };
                    
map[oneDoor].prototype = new map.moveEvent(nextMapnextXnextYnextReal);
                }
                
myMap0[j][k] = xmlMap0.firstChild.childNodes[j].childNodes[k].attributes.frame;
            }
        }
    } else {
    }
};
xmlMap1 = new XML();
xmlMap1.ignoreWhite true;
...
...
... 
... wollte ich dies so lösen
PHP-Code:
for (var 0i<5; ++i) {
    
//trace(i);
    
this["xmlMap"+i] = new XML();
    
this["xmlMap"+i].ignoreWhite true;
    
this["xmlMap"+i].load("maps/map"+i+".xml");
    
this["xmlMap"+i].onLoad = function(success) {
    
//trace(i);
        
if (success) {
            
_root["myMap"+i] = new Array();
            var 
rows this["xmlMap"+i].firstChild.lastChild.childNodes[0].attributes.rows;
            var 
columns this["xmlMap"+i].firstChild.lastChild.childNodes[0].attributes.columns;
            
//trace(rows+" "+columns);
            
for (var 0j<rowsj++) {
                
_root["myMap"+i][j] = new Array();
                for (var 
0k<columnsk++) {
                    if (
this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.door) {
                        var 
oneDoor "Tile"+this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.frame;
                        var 
nextMap this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.map;
                        var 
nextX this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.heroX;
                        var 
nextY this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.heroY;
                        var 
nextReal this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.real;
                        
map[oneDoor] = function () {
                        };
                        
map[oneDoor].prototype = new map.moveEvent(nextMapnextXnextYnextReal);
                    }
                    
_root["myMap"+i][j][k] = this["xmlMap"+i].firstChild.childNodes[j].childNodes[k].attributes.frame;
                }
            }
        } else {
        }
    };

Probleme:
1. Es wird jeweils nur die letze Datei ausgelesen:
Beim ersten trace(i) gibt Flash 0,1,2,3,4 aus -> logisch
Beim zweiten trace(i) gibt Flash 5,5,5,5,5 aus

2. Scheinbar wird die Datei gar nicht ausgelesen:
Bei trace(rows+" "+columns) wird "undefined undefined" ausgegeben, folglich funktionieren die 2 For-Schleifen danach auch nicht

3. Bei den dynamischen 2D-Arrays bin ich mir nicht sicher, wie man die erstellt/darauf zugreift
so: _root["myMap"+i][j] = new Array();
oder so: _root["myMap"+i[j]] = new Array(); ?

Kann mir da jemand weiterhelfen? Vielen Dank im voraus!
Gruss Kilnaj
Kilnaj ist offline   Mit Zitat antworten
Alt 01-08-2007, 14:40   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Auf "i" kannste im onLoad() so nicht zu greifen, weil's durchgezählt ist. Für dein XML brauchst du das eh nicht. Also quasi
PHP-Code:
var rows this.firstChild.lastChild.childNodes[0].attributes.rows
anstelle
PHP-Code:
var rows this["xmlMap"+i].firstChild.lastChild.childNodes[0].attributes.rows
Um die "IDs" auch für deine Arrays zu nutzen, kannst du das so z.B. machen:
PHP-Code:
for (var 0i<5; ++i) { 
this["xmlMap"+i] = new XML();
this["xmlMap"+i].id i
... 
Im onLoad dann:
PHP-Code:
_root["myMap"+this.id] = new Array();
... 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 01-08-2007, 15:02   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2006
Beiträge: 2
Wow! Danke für die schnelle Antwort!!! Jetzt funktioniert alles prima
Kilnaj ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele