Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-01-2005, 14:41   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2002
Beiträge: 33
Question Funktionen dynamisch erstellen

Hallo zusammen,

ich habe ein Array, aus dem ich mir ein paar Funktionen zusammen bauen will. Das verwendete Array beinhaltet wiederum beliebig viele Arrays, aktuell 2. Das Code Snippet sieht folgendermassen aus.

ActionScript:
  1. for (var z = 0; z < arrNavMenu.length; z++) {
  2.  
  3.         trace(arrNavMenu[z][0])// gibt er aus
  4.            
  5.         // Funktionen für MouseOver Effekte
  6.         _root.theContent[arrNavMenu[z][0]].onRollOver = function() {
  7.             _root.theContent[arrNavMenu[z][1]]._visible = false;
  8.             _root.theContent[arrNavMenu[z][2]]._visible = true;
  9.             _root.theContent[arrNavMenu[z][3]]._visible = false;
  10.             _root.theContent[arrNavMenu[z][4]]._visible = true;
  11.             trace(arrNavMenu[z][0])// gibt er nicht aus
  12.         }
  13.        
  14.         _root.theContent[arrNavMenu[z][0]].onRollOut = function() {
  15.             _root.theContent[arrNavMenu[z][1]]._visible = true;
  16.             _root.theContent[arrNavMenu[z][2]]._visible = false;
  17.             _root.theContent[arrNavMenu[z][3]]._visible = true;
  18.             _root.theContent[arrNavMenu[z][4]]._visible = false;
  19.         }
  20.     }

Aus irgendeinem Grund funktioniert es nicht, wenn ich es über dieses Array versuche. Wenn ich die Funktionen manuell erstelle, funktioniert alles, nur ist das nicht Sinn der Sache, da ich ja nicht weiss, wieviele Arrays ich im Endeffekt haben werde.

Wäre nett, wenn jemand helfen könnte ...
chapi ist offline   Mit Zitat antworten
Alt 13-01-2005, 15:39   #2 (permalink)
Neuer User
 
Benutzerbild von dr_gonzo
 
Registriert seit: Apr 2004
Ort: Pforzheim
Beiträge: 69
Eigentlich sieht man da auf den ersten Blick auch keinen Fehler, das einzige was verwirrt ist dass du mit arrNavMenu.length die Anzahl der Members in arrNavMenu ermittelst und anschließend aus arrNavMenu[z][0] die Referenz auf das Objekt ermittelst.
Wie sieht denn die Ausgabe aus die du bekommst per trace?
Wenn du wirklich die Referenz auf einen MovieClip in arrNavMenu[z][0] speicherst steht in
arrNavMenu[z][0] = _level0.theContent.deinmc
und du kannst dir das _root.theContent davor sparen

das Ganze ist ja Teil eines Scriptes und nicht innerhalb eines Klassen-Scripts oder?

greetz
seb
dr_gonzo ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:03   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2002
Beiträge: 33
In dem Array sind einfache Strings gespeichert. Da ich vorher andere MC's dynamisch generiere, speichere ich deren Namen in diesem Array ab.

Wie gesagt wenn ich das alles nicht durch die for Schleife jage, sondern die Funktionen manuell mit den Arraywerten fülle, dann funktioniert es. Also nachfolgender Code würde funktionieren (z durch den ersten Wert der for-Schleife, 0, ersetzt).

ActionScript:
  1. _root.theContent[arrNavMenu[0][0]].onRollOver = function() {
  2.        _root.theContent[arrNavMenu[0][1]]._visible = false;
  3.        _root.theContent[arrNavMenu[0][2]]._visible = true;
  4.        _root.theContent[arrNavMenu[0][3]]._visible = false;
  5.        _root.theContent[arrNavMenu[0][4]]._visible = true;
  6. }

Ich weiss leider nicht an was das liegt?!

Geändert von chapi (13-01-2005 um 16:05 Uhr)
chapi ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:06   #4 (permalink)
Neuer User
 
Benutzerbild von dr_gonzo
 
Registriert seit: Apr 2004
Ort: Pforzheim
Beiträge: 69
diese Problem hatte ich auch einmal ... da war es dann so dass nach jedem Durchlauf durch die for-Schleife immer nur die Letzte Button-Aktion auch tatsächlich dem onRelease Ereigniss zugewießen wurde. Es war irgendwie als ob nur die letzte Anweisung ausgeführt wurde weil die vorhergehenden immer sofort wieder überschrieben wurde. Kann es sein dass es bei dir genauso ist?

greetz
seb
dr_gonzo ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:12   #5 (permalink)
fly, you fools!
 
Registriert seit: Jun 2003
Ort: Oldenburg
Beiträge: 131
versuch das mal in etwa so:

PHP-Code:
for (var 0arrNavMenu.lengthz++) {

        
_root.theContent[arrNavMenu[z][0]].nr z;
            
        
_root.theContent[arrNavMenu[z][0]].onRollOver = function() {
            
_root.theContent[arrNavMenu[this.nr][1]]._visible false;
            
_root.theContent[arrNavMenu[this.nr][2]]._visible true;
            
_root.theContent[arrNavMenu[this.nr][3]]._visible false;
            
_root.theContent[arrNavMenu[this.nr][4]]._visible true;
            
trace(arrNavMenu[this.nr][0]);  // gibt er nicht aus
        
}
 } 
|H|K| ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:20   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2002
Beiträge: 33
@dr_gonzo:
Ja genau so würde ich sagen ist das bei mir passiert.


@|H|K|:
Es funktioniert! Fein! Könntest du mir dein Vorgehen evtl. noch kurz erläutern?
chapi ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:25   #7 (permalink)
Neuer User
 
Benutzerbild von dr_gonzo
 
Registriert seit: Apr 2004
Ort: Pforzheim
Beiträge: 69
oh das kann natürlich auch sein daran hab ich gar nicht gedacht, dass es vielleicht doch ein Pfad Problem is ... asoo
naja dann müsste es doch aber eigentlich auch mit:
trace(_root.arrNavMenu[z][0]);
gehen oder nicht?

greetz
seb
dr_gonzo ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:34   #8 (permalink)
fly, you fools!
 
Registriert seit: Jun 2003
Ort: Oldenburg
Beiträge: 131
Zitat:
Zitat von chapi
@|H|K|:
Es funktioniert! Fein! Könntest du mir dein Vorgehen evtl. noch kurz erläutern?
Ja. Ich habe einfach jedem Button eine zusätzlich Variable verpasst und dieser den Wert der Variable z für den jeweiligen Durchlauf deiner for-Schleife zugewiesen. Die Variable "nr" gilt dann auch nur innerhalb des jeweiligen Buttons, während "z", das sich außerhalb befindet, am ende der for-Schleife für jeden Button gleich ist. So hat jeder Button eine eigene Variable "nr", die dann einfach mit "this.nr" anzusprechen ist.
|H|K| ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:44   #9 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Zitat:
Zitat von dr_gonzo
naja dann müsste es doch aber eigentlich auch mit:
trace(_root.arrNavMenu[z][0]);
gehen oder nicht?
Nein bei der Variante mit [z][0] wird immer der letzte wert der for-schleife genommen!!
Bei der anderen Variante wird die jehweilige zahl aus der for-schleife für jeden array-eintrag (respt. buton) extra gespeichert!

Hier mal was zum vergleichen!!
ActionScript:
  1. for (var i = 0; i<5; i++) {
  2.     var test = _root.createEmptyMovieClip("container"+i, i);
  3.     test.ID = i;
  4.     trace("container"+i+"_ID  = "+test.ID);
  5. }
  6. trace("**Außerhalbn der forschleife**");
  7. trace("container2 seine ID = "+container2.ID)
  8. trace("des 'i' aus der for-schleife = "+i)
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:59   #10 (permalink)
Neuer User
 
Benutzerbild von dr_gonzo
 
Registriert seit: Apr 2004
Ort: Pforzheim
Beiträge: 69
ahh ok dann isses doch kein Pfadproblem

greetz
seb
dr_gonzo ist offline   Mit Zitat antworten
Alt 14-01-2005, 04:14   #11 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
H|K und rusty haben es ja bereits angedeutet...ich erklär nochmal kurz, warum das so ist.

die for-schleife rennt ja durch ihre schleifenvar durch.
alleridngs ist ein event, wie ein onRollOver oder ein onPress ja eine benutzerdefinierte aktion, die erst zur laufzeit ausgeführt wird.
das heißt, dass das event auch erst dann korrekt gelesen wird, wenn es gebraucht wird.
zu diesem zeitpunkt allerdings ist ja die schleife schon längst beendet..
deshalb ist auch ein trace(z) innerhalb des events entweder undefined, oder aber ,w enn die var nicht als var z = irgendwas; angelegt wurde, der wert, der beim testen der schleifenbedingung nicht mehr stimmte...
also wenn ihr ein
ActionScript:
  1. for(z=0; z<10;z++)

dann ist z zum zeitpunkt des events 10

wenn man nun aber jedem mc/button einfach ne eigenschaft mitgibt, die den wert von z speichert, so kann dieser button/mc auch während der laufzeit auf diesen wert, anhand der eigenschaft, drauf zugreifen..

alles verstanden?


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 14-01-2005, 08:22   #12 (permalink)
nobody is perfect
 
Benutzerbild von Decrone
 
Registriert seit: Apr 2002
Ort: Bremen
Beiträge: 3.049
Zitat:
Zitat von kelor
wenn man nun aber jedem mc/button einfach ne eigenschaft mitgibt, die den wert von z speichert, so kann dieser button/mc auch während der laufzeit auf diesen wert, anhand der eigenschaft, drauf zugreifen..

alles verstanden?

greetz

kelor
roger & hi @Kelor, hi Rusty dieses Prob. taucht leider immer wieder gerne auf...

bye
__________________
FF Unterstützen! Erste Hilfe! häufig gestellten Fragen
...................... ............... ................................
Decrone ist offline   Mit Zitat antworten
Alt 14-01-2005, 11:43   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2002
Beiträge: 33
Thumbs up

Danke nochmals an alle für die Hilfe und die ausführlichen Erklärungen!
chapi 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 13:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele