Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-06-2004, 19:35   #1 (permalink)
FlashFreak ;-)
 
Registriert seit: Jun 2002
Ort: Berlin
Beiträge: 102
Post Instanzname mit ActionSkript "ermitteln" ?

Also angenommen ich erstelle zuerst dynmisch mit
Attachmovie 10 Movieclips die Buttons enthalten nacheinander in einer while-Schleife.
Jeder hat den Namen button1, button2 u.s.w.

nun will ich das jeder Button aber was anderes macht.
und zwar so:

die 10 Movieclips enthalten ja alle einen Button mit einem Script:

on(release) {
gotoandstop(X);
}

if( dieser_movieclip_instanzname = button1)
x = 45;
if( dieser_movieclip_instanzname = button2)
x = 23
if( dieser_movieclip_instanzname = button3)
x = 62

u.s.w.


-------------------
Ist es möglich den instantznamen eines Movieclips in dem man sich befindet rauszufinden?

Oder hat jemand eine andere/bessere Lösung?
Also ich habe per AttachMovie ein beliebige Anzahl Buttons erstellt. Und alle sollen ein anderes Actionskript ausführen.
Blubbie ist offline   Mit Zitat antworten
Alt 15-06-2004, 19:48   #2 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
PHP-Code:
var zahlenArray = [44556329997725871497];
for (
i=0i<zahlenArray.lengthi++) {
    
this.attachMovie("mc""mc"+ii, {_x:(50*i)+25_y:50});
    
this["mc"+i].i;
    
this["mc"+i].onPress = function() {
        var 
zahlenArray[this.i];
        
trace(x);
        
trace(this._name);
    };

__________________
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 15-06-2004, 22:38   #3 (permalink)
FlashFreak ;-)
 
Registriert seit: Jun 2002
Ort: Berlin
Beiträge: 102
Vielen Dank für die schnelle Hilfe - habs grad in einem Testfilm ausprobiert und es funktioniert auch

Allerdings sind mir einige Sachen aus dem Actionscript unklar. Ich bin aber daran interessiert alles zu verstehen.
Daher mein klärungsbedarf

>>var zahlenArray = [44, 55, 63, 29, 99, 77, 25, 87, 14, 97];

Zahlenarray wird erstellt.

>>for (i=0; i<zahlenArray.length; i++) {

FOR-Schleife für die Länge des Arrays.

>>this.attachMovie("mc", "mc"+i, i, {_x50*i)+25, _y:50});

Movieclip "mc" wird hinzugefügt mit festem y-Wert und einem sich verschiebenen x-wert.

>> this["mc"+i].i = i;

Diese Zeile ist mir absolut ein Rätsel
Also es geht um den gerade erstellen Movieclip.
Und man weisst ihm den aktuellen Zähler "i" zu.
Aber - WAS IST .i (punkt i ) ???

>> this["mc"+i].onPress = function() {

dem aktuellen Movieclip wird die Eigenschaft(?) onPress hinzugefügt - und diese Eigenschaft wird als Funktion deklariert. (?)

>> var x = zahlenArray[this.i];

Der Variable X wird der Inhalt des Zahlenarrays an der stelle "i" hinzugefügt. Was ich hierran nicht verstehe. Wieso in dem Fall ein "this" vor dem i sein muss. Ohne "this" gibts ein "undifined".

>>trace(x);
>>trace(this._name);
>> };
>>}

der rest ist ja klar..
Blubbie ist offline   Mit Zitat antworten
Alt 15-06-2004, 22:48   #4 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Man speichert in dem durchlauf der "for" schleife für jeden Clip respt. button seinen "i"-wert, damit verpasst Du im sowas wie eine "ID" und damit lassen sich easy Tabellen ansteuern

Nachtrag, hatte ich noch vergessen, mit "this.i" frägst die gespeicherten "i" ab
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"

Geändert von RustyCake (15-06-2004 um 22:52 Uhr)
RustyCake ist offline   Mit Zitat antworten
Alt 15-06-2004, 22:54   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 38
Code:
>> this["mc"+i].i = i;

Diese Zeile ist mir absolut ein Rätsel
Also es geht um den gerade erstellen Movieclip.
Und man weisst ihm den aktuellen Zähler "i" zu.
Aber - WAS IST .i (punkt i ) ???
Du fügst hier dem neuen MC-Objekt ein Attribut i zu und dieses wird auf den Wert i gesetzt. Ein Attribut ist eine Variable des Objektes, das sich für das Objekt einen Wert merken kann (genauso wie _width, _height usw.). Innherhalb des Objektes kann man dann mit this.i wieder auf diesen Wert zugreifen. Wie das Attribut heißt, ist eigentlich egal. Man hätte genauso schreiben können:
this["mc"+i].counter = i;
Bleibt man bei dem Namen "i" für das Attribut, so speichert das Objekt im Attribut i den Wert des Zählers aus der for-schleife.
Wird nun die onPress-Funktion des Objektes aufgerufen, "weiß es" anhand des Wertes von this.i auf welchen Eintrag es im Array zahlenArray zugreifen muss.
Ich hoffe das ist jetzt nicht zu verwirrend und hilft weiter .
realtigger ist offline   Mit Zitat antworten
Alt 15-06-2004, 22:58   #6 (permalink)
FlashFreak ;-)
 
Registriert seit: Jun 2002
Ort: Berlin
Beiträge: 102
Also habs mir grad nochmal durch den Kopf gehen lassen und was ausprobiert...

>> this["mc"+i].i = i;

Hier erstellt man im erstellen Movieclip eine Variable i
und gibt ihr den Wert der aktuellen i-Variable

>> var x = zahlenArray[this.i];

Hier wird auf das Array zugegriffen mit der Variable i - die man zuvor für den jeweiligen Movieclip erstellt hat.

ABER.............
Wieso muss man das so machen?
Wieso kann man nicht diese Zeile
>> this["mc"+i].i = i;
WEGLASSEN !
Und nicht einfach so schreiben
>> var x = zahlenArray[i];

???
Wieso muss ich dem erstellten Movieclip eine Variable übergeben?
Blubbie ist offline   Mit Zitat antworten
Alt 15-06-2004, 23:07   #7 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Wil des nicht funktioniert, Du bekommst immer das letzte "i" aus der for-schleife
__________________
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 15-06-2004, 23:23   #8 (permalink)
FlashFreak ;-)
 
Registriert seit: Jun 2002
Ort: Berlin
Beiträge: 102
Unhappy

sorry wenn ich nerve

Aber genau das will ich doch auch haben?
Ich bin doch noch in der FOR-Schleife drin.
Und da ist das i von der FOR schleife doch noch gültig.
Wozu muss ich da jetzt für den erstellten MC noch ein weiteres i anlegen?
Blubbie ist offline   Mit Zitat antworten
Alt 16-06-2004, 00:20   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 38
Ich glaube hier liegt ein grundsätzliches verständnisproblem vor. Also versuchen wir es mal anders:
Die in der for-schleife definierte Funktion onPress wird ja erst dann ausgeführt, wenn auf den Button geklickt wird. Die Forschleife um diese Funktion "existert zu diesem Zeitpunkt nicht mehr". Das Moviclip-Objekt "weiß" nichts mehr von einer for-schleife, sondern kennt nur seine Attribute und führt die onPress-funktion aus.
Die onPress-Funktion sagt nun: schaue im Array zahlenArray unter dem index this.i (also genau dem ATTRIBUT i) nach.
würdest du hier einfach i nehmen, so ist i ja gar nicht definiert. Die for-schleife existiert zu dem zeitpunkt ja scheinbar nicht mehr.

Das Ganze Missverständnis tritt auf, weil Actionscript alles anderes als eine konsequente Programmiersprache ist und das diese Lösungen nicht sauber ist und eher als Hack anzusehen ist .
Das soll jetzt nicht heißen, dass solche Lösungen nicht funktionieren. Sie führen nur schnell zu Verwirrung und sollten in größeren Projekten eher vermieden werden.
realtigger ist offline   Mit Zitat antworten
Alt 16-06-2004, 08:35   #10 (permalink)
FlashFreak ;-)
 
Registriert seit: Jun 2002
Ort: Berlin
Beiträge: 102
Danke für die ausführliche Erklärung :-)
Blubbie ist offline   Mit Zitat antworten
Alt 16-06-2004, 14:07   #11 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Zitat:
Zitat von realtigger
Das soll jetzt nicht heißen, dass solche Lösungen nicht funktionieren. Sie führen nur schnell zu Verwirrung und sollten in größeren Projekten eher vermieden werden.
Versteh ich nicht ganz, was soll man in größeren Projekten vermeiden! die "i" speichern?
__________________
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 16-06-2004, 14:26   #12 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
ich finde auch das dies nicht al shack anzusehen ist...
ist ein ganz normales zuweisen einer property...
ich find das ihr 2 mal i genommen habt einn bisschen unglücklich..
ich hätte i als zähler genommen - und die eigenschaft anderes benannt ..
aber paperlapapp - it works !
und ich finde echt nicht das es aus dem rahmen fällt

anbei
- hi rusty

Gruss nky
nky ist offline   Mit Zitat antworten
Alt 16-06-2004, 14:31   #13 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Hehe!
Hi nky!
Dann mach ichs nächstesmal so!!
this["mc"+i].id = i;
Wobei ichs echt schon oft verwendet hab, und nie gabs Probleme
__________________
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 16-06-2004, 14:40   #14 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
gut
nky ist offline   Mit Zitat antworten
Alt 16-06-2004, 21:00   #15 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 38
Mir ging es gar nicht um das "i", sondern um die dynamisch erstellte onPress-Funktion.
Wenn man die Sache sauber lösen wollte, hätte hier eher eine Movieclip-Klasse erstellte, der man im Konstruktor, den entsprechenden i-Wert übergibt. Am besten noch direkt den Wert des Arrays, denn globale Variablen (so wie der Array zahlenArray hier) sind meiner Meinung nach nicht das gelbe vom Ei...
Aber wie schon gesagt, es funktioniert ja so alles und wer damit klar kommt, soll es so benutzen und für einen kleinen Flashfilm ist mein Ansatz wahrscheinlich zu aufwendig.
realtigger 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 16:40 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele