Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-05-2005, 15:29   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 39
dynamische Schaltfächen in onLoad Block???

Hallo,

ich habe Daten in einem onLoad-Block aus einer XML-Datei ausgelesen.
Jetzt möchte ich ein Hintergrundbild, hinter die Daten legen und dieses als Button benutzen. Das spreche ich über _root["back"+i].onRelease = function() an. Leider funktioniert das nicht. :-(
Ich denke es liegt daran, weil es innerhalb des onLoad-Blocks liegt.
Außerhalb dessen hat es testweise funktioniert, nur existieren dort die Objekte, die ich innerhalb der for-Schleife definiert habe -> "back"+i <- nicht mehr.
Was kann ich machen?

ActionScript:
  1. // +++ Datenverbindung zum XML Dokument data.xml
  2.  
  3. // txt-Datei wird nicht als UNICODE interpretiert
  4. system.useCodepage = true;
  5.  
  6. // neues XML Objekt
  7. objXML = new XML();
  8.  
  9. // Leerzeichen werden ignoriert
  10. objXML.ignoreWhite = true;
  11.  
  12. // Funktion
  13. objXML.onLoad = function(datei) {
  14.     arrayXML = objXML.firstChild.childNodes;
  15.  
  16.     for (var i = 0; i<arrayXML.length; i++)
  17.     {
  18.                if (arrayXML[i].nodeName == "Work")
  19.                {                       
  20.             // Hintergrund an Position
  21.             duplicateMovieClip(back, "back"+i, i);
  22.             eval("back"+i)._x = xpos - back_abstand;
  23.             eval("back"+i)._y = y_pic - back_abstand;      
  24.             eval("back"+i)._width = x_breite + back_abstand * 2;
  25.            
  26.                         // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  27.             _root["back"+i].onRelease = function()
  28.             {
  29.                 trace ("tag");
  30.             }
  31.            
  32.         } // if
  33.                
  34.     } // for
  35.    
  36. delete objXML;
  37.    
  38. }; // function
  39.  
  40. // Funktion wird aufgerufen
  41. objXML.load("data.xml");


Noch eine generelle Frage in diesem Zusammenhang:
Wo ist der Unterschied zwischen diesen beiden Befehlen:
ActionScript:
  1. eval("back"+i).
  2. _root["back"+i].


Danke für eure Hilfe! ;-)

Gruß
novePulse
novaPulse ist offline   Mit Zitat antworten
Alt 16-05-2005, 15:39   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..Wo ist der Unterschied zwischen diesen beiden Befehlen.."
eval("back"+i). <-- geht nicht
_root["back"+i]. <-- geht

und steht auch so im handbuch :-/ das eval nicht als zuweissung benützt werden kann (war mal so bis flash5?). rechts vom gleichheitszeichen, als funktion, kann'st du eval einsetzen.
ActionScript:
  1. // +++ Datenverbindung zum XML Dokument data.xml
  2. // txt-Datei wird nicht als UNICODE interpretiert
  3. system.useCodepage = true;
  4. // neues XML Objekt
  5. objXML = new XML();
  6. // Leerzeichen werden ignoriert ??? im handbuch steht das anderes ;-)
  7. // Ist diese Eigenschaft auf true gesetzt, werden Textknoten, die nur
  8. // Leerzeichen enthalten, beim Parsen gelöscht.
  9. objXML.ignoreWhite = true;
  10. // Funktion
  11. objXML.onLoad = function(datei) {
  12.     arrayXML = this.firstChild.childNodes;
  13.     for (var i = 0; i<arrayXML.length; i++) {
  14.         if (arrayXML[i].nodeName == "Work") {
  15.             // Hintergrund an Position
  16.             var mc = duplicateMovieClip(back, "back"+i, [b] i+1[/b]);
  17.             mc._x = xpos-back_abstand;
  18.             mc._y = y_pic-back_abstand;
  19.             mc._width = x_breite+back_abstand*2;
  20.             mc.onRelease = function() {
  21.                 trace("tag");
  22.             };
  23.         }
  24.     }
  25.     delete this;
  26. };
  27. // Funktion wird aufgerufen
  28. objXML.load("data.xml");
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (16-05-2005 um 15:54 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 16-05-2005, 15:40   #3 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hi!
Erstmal zu der Frage:
In Flash ab Version 5 können mit eval() keine Variablenwerte oder Instanznamen dynamisch gesetzt oder abgerufen werden, da eval() nicht auf der linken Seite einer Gleichung stehen darf. Ersetzen Sie beispielsweise den Code

eval ("var" + i) = "first";

durch diesen:

this["var"+i] = "first"

oder diesen:

set ("var" + i, "first");

--------------------

Deswegen geht dein Script wohl auch nicht. Ersetz die eval-Geschichte mal durch _root["back"+i].
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 16-05-2005, 15:58   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 39
danke für die Erklärung

wenn ich eval("back"+i). wie unten ersetze wird das Objekt "back" gar nicht mehr dargestellt. Vorher ging es aber.
Mein eigentliches Problem ist aber, dass die Funktion onRelease nicht funktionert.
Verträgt sich das mit onLoad nicht?


ActionScript:
  1. duplicateMovieClip(back, "back"+i, z_back);
  2.             _root["back"+i]._x = xpos - back_abstand;
  3.             _root["back"+i]._y = y_pic - back_abstand;   
  4.             _root["back"+i]._width = x_breite + back_abstand * 2;
  5.  
  6.            
  7.             _root.["back"+i].onRelease = function()
  8.             {
  9.                 trace ("tag");
  10.             }
novaPulse ist offline   Mit Zitat antworten
Alt 16-05-2005, 16:08   #5 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
ActionScript:
  1. _root.["back"+i].onRelease = function()

mach da mal den Punkt weg:

ActionScript:
  1. _root["back"+i].onRelease = function()
pokepika ist offline   Mit Zitat antworten
Alt 16-05-2005, 16:18   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
wozu machen wir uns denn die arbeit dir etwas zu zeigen?
var mc = duplicateMovieClip(back, "back"+i, i+1);

var mc =
erspahrt flash jedesmal die adresse ermitteln zu müssen und "wir" wissen ja nicht, ob das was du da duplizierst tatsächlich auf _root liegt (wird hierdurch auch umgangen).

level i+1
mit level == 0 dürftest du das original abgeschossen haben.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 16-05-2005, 16:42   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 39
@hgseib - hey sorry, habs echt überlesen. Danke, werd' mal jetzt weiter tüfteln, jetzt wird's wohl klappen! ;-)
novaPulse 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 05:16 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele