Vergleich von MovieClip Pfaden

skomsnaes

Mitglied
Hallo zusammen,

mag sein, dass die Frage recht trival ist, aber ich habe gerade folgendes Problem:

Ich habe festgestellt, dass folgende Aussage niemals wahr wird, obwohl, wenn ich mir die Werte ausgeben lasse, der Inhalt übereinstimmt:

Also, ich initialisiere eine Array mit folgenden Werten.

Code:
var = new Array(80);
for (i = 0; i < 80; i++) {
   var[i] = "_root.mein_mc" + i;
};
Damit steht in var (laut Ausgabe zumindest) _root.mein_mc1, _root.mein_mc2 usw.

Im weiteren verlauf erstelle ich dann fleißig MovieClips, die ich mit

Code:
_root.mc._name = "mein_mc" + i
umbenenne. Also heißen die ja eigentlich auch, _root.mein_mc1, _root.mein_mc2 usw.
, jedenfalls laut Ausgabe.

Wenn ich jetzt in dem erzeugten MovieClip einen Button betätige mache ich folgenden Check:

Code:
i = 0;
while (i < 80 && var[i] != this) {
   trace ("Hurra, gefunden!!");
   i++;
};
Allerdings wird der Ausdruck niemals wahr. Nur wenn ich var direkt z.B.:

Code:
var[1] = _root.mein_mc1
zuweise, funktioniert die Abfrage. :confused:

Hat da jemand eine sinnvolle Erklärung für? Und wenn ja, vielleicht sogar eine Idee, wie man das Problem umgehen kann?

Vielen Dank schonmal!!
 
Hallo,

du überschreibst ja immer dein "_root.mc._name" wenn sich dieser in der for Schleife befindet.
PHP:
_root.mc._name = "mein_mc" + i

also hast du am ende nur einen Clip. Und wo erstellst du bitte deine MC's?

Wenn du mir erklärst was du mit dem Script machen möchtest dann kann ich dir Helfen :)
 
Ok, also werde ich doch die detaillierte Version posten.

Grundsätzlich ist es dafür da, eine Art Baumstruktur zu erstellen, wobei die EInträge dazu aus einem Array kommen. Der Baum wird jedesmal neu gezeichnet und je nachdem, ob dann ein Knoten "geöffnet" oder "geschlossen" ist, muss halt ein Ast mehr gezeichnet werden. Da die einzelnen Äste aber aus ein und demselben MovieClip in der Bibliothek gebaut werden, muss ich beim Abfragen des Buttons feststellen, auf welchem Ast ich mich befinde, sprich welchen Knoten ich erweitern muss.

Die Abfrage dachte ich halt über eine Schleife zu machen, die mir im Array nach der entsprechenden Bezeichnung sucht.

Hier der Code dazu in der Hauptzeitleiste:

Code:
function buildTree(whichWindow) {
    whichWindow.TreeContainer.VehiclesRoot.removeMovieClip();
    whichWindow.TreeContainer.attachMovie("VehiclesRootKnoten", "VehiclesRoot", 3010);

    if (_global.vehicleList[0][2]) {
       i = 1;
       ebene = 3020;
       while (i < 80 && _global.vehicleList[i][0] != "none") {
          whichWindow.TreeContainer.VehiclesRoot.attachMovie("VehiclesBranchKnoten", "TreeView", ebene);
          ebene++;
          if (_global.vehicleList[i][2]) {
               whichWindow.TreeContainer.VehiclesRoot.attachMovie("VehiclesCameraRoot", "CameraRoot", ebene);
               ebene++;
          };
          whichWindow.TreeContainer.VehiclesRoot.TreeView._name = "VehiclesBranch" + i;
          _global.vehicleList[i][4] = whichWindow + ".TreeContainer.VehiclesRoot.VehiclesBranch" + i;
          i++;
       };
    };
    _global.vehiclesTreeBuilt = true;
};


Und das hier ist dann der Code, der auf dem Button sitzt:

Code:
on(release) {
     i = 0;
     while (i < 80 && _global.vehicleList[i][4] != this) {
           i++
     };
     _global.vehicleList[i][2] = true;
     _root.buildTree(_root.VehiclesDocked);
}

Das funktioniert auch schon so, das einzige, was halt fehlschlägt ist der Vergleich in der While-Schleife beim Button. Sobald ich im Hauptprogramm nicht
Code:
_global.vehicleList[i][4] = whichWindow + ".TreeContainer.VehiclesRoot.VehiclesBranch" + i;
sondern
Code:
_global.vehicleList[i][4] = whichWindow.TreeContainer.VehiclesRoot.VehiclesBranch1;
schreibe, passiert genau das, was ich wollte (allerdings nur für den ersten Ast, versteht sich).

Ergibt das einen Sinn?

Ich möchte noch hinzufügen, dass ich erstens Autodidact und zweitens immernoch blutiger Anfänger bin, also keine Rücksicht, wenn das irgendwas ist, was man grundsätzlich nicht macht. ;)
 
Aaaahhhh,

ich habe gerade die Lösung selber gefunden (mehr durch Zufall, aber das ist ja immer so) :) .

Man muss die Zuweisung einfach mit einem
Code:
eval()
kappseln, dann wird alles gut.

meine Originalanweisung heißt also:
Code:
_global.vehicleList[i][4] = eval(whichWindow + ".TreeContainer.VehiclesRoot.VehiclesBranch" + i);

Nur, falls es jemanden interessiert. (Freu!!)
 
Zurück