Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Wie komm ich an diese Variable?“

Arceus

Gesperrt

Hallo,
ich habe auf einen mc ("map1") eine Funktion, diese Funktion beinhaltet eine weitere Funktion und diese wiederums braucht eine Variable aus der ersten Funktion.
Wie kann ich sie beziehen?^^
Code:
onClipEvent(enterFrame) {
var radar = function() {
    ...
for (var i=1;i<=2;i++) {
    var username = _root["fname" +i];  //Genau diese Variable brauch ich-.-
    ...
    _root["player" +i].onRollOver = function() {
            _root.name_txt.text = username;  //Hier soll sie hin-.-
        }
}
}
radar();
}
Jemand eine Lösung?
 
Zuletzt bearbeitet:

h_seldon

Aktives Mitglied

AW: Wie komm ich an diese Variable?

Hallo,

hmm, das Skript ist in mehrfacher Hinsicht optimierfähig:

1. sind Objektskripte veraltet. Stattdessen werden nur noch Bildskripte verwendet.
2. macht es keinen Sinn, in einem enterFrame-Ereignis einer Variablen eine Funktion zuzuweisen bzw. eine Funktion zu deklarieren - das führt nämlich dazu, dass permanent diese Funktion definiert wird, obwohl ein einziges Mal ausreichen würde.
3. genau so wenig macht es Sinn, in einem enterFrame-Ereignis ein rollOver-Ereignis zuzuweisen, denn auch diese Zuweisung wird permanent ausgeführt. Mit anderen Worten zwingst Du den Player dazu, andauernd überflüssige Arbeit auszuführen.
4. wird die Variable username zwar innerhalb der Schleife korrekt zusammengesetzt, die zugewiesenen RollOver dagegen können erst dann erfolgen, wenn die Schleife komplett abgearbeitet wurde. Dann enthält username aber nur noch den zuletzt in der Schleife ermittelten Wert, konkret: fname2. Würde also der rollOver ausgeführt, könnte immer nur fname2 im Textfeld angezeigt werden.

Mögliche Lösung:
Annahme: auf der Bühne in der Hauptzeitleiste befinden sich vier MovieClips (fname1, fname2, player1, player2) sowie ein einsames, aber deswegen nicht unbedingt trauriges Textfeld (name_txt).
Bildskript im selben Frame:

PHP:
//legt die Anzahl der Objekte fest
var nAnzahl:Number = 2;
function radar() {
	for (var i = 1; i<=nAnzahl; i++) {	
//weist jedem Objekt, das nachher auf rollover reagieren soll,
//eine variable zu, in der das gesuchte Element gespeichert wird	
//statt _root wird this verwendet, um Probleme zu vermeiden,
//falls die aktuelle swf per loadMovie in eine andere geladen werden soll
		this["player"+i].username = this["fname"+i];
		this["player"+i].onRollOver = function() {
			name_txt.text = this.username;
		};
	}
}
radar();

Keine Ahnung, was konkret hinter username steckt. Handelt es sich tatsächlich um einen MovieClip (wie hier angenommen), dann wäre es vielleicht besser, ins Textfeld nur den Instanznamen statt die gesamte Instanz auszugeben.

Viel Spass
 

Nalle

Blubberblödi

AW: Wie komm ich an diese Variable?

du könntest die variable auf der hauptbühne festlegen und mit den funktionen auf diese zugreiffen. z.B.

var test = 0 // liegt auf der hauptbühne im as

und bei den funktionen greifst du einfach auf die variable der hauptbühne zu, würde so aussehen

_root.test (........)


also das wäre eine einfache lösung
 

Arceus

Gesperrt

AW: Wie komm ich an diese Variable?

Hallo,

hmm, das Skript ist in mehrfacher Hinsicht optimierfähig:

1. sind Objektskripte veraltet. Stattdessen werden nur noch Bildskripte verwendet.
2. macht es keinen Sinn, in einem enterFrame-Ereignis einer Variablen eine Funktion zuzuweisen bzw. eine Funktion zu deklarieren - das führt nämlich dazu, dass permanent diese Funktion definiert wird, obwohl ein einziges Mal ausreichen würde.
3. genau so wenig macht es Sinn, in einem enterFrame-Ereignis ein rollOver-Ereignis zuzuweisen, denn auch diese Zuweisung wird permanent ausgeführt. Mit anderen Worten zwingst Du den Player dazu, andauernd überflüssige Arbeit auszuführen.
4. wird die Variable username zwar innerhalb der Schleife korrekt zusammengesetzt, die zugewiesenen RollOver dagegen können erst dann erfolgen, wenn die Schleife komplett abgearbeitet wurde. Dann enthält username aber nur noch den zuletzt in der Schleife ermittelten Wert, konkret: fname2. Würde also der rollOver ausgeführt, könnte immer nur fname2 im Textfeld angezeigt werden.

Danke mit deiner Lösung hat es funktioniert :p
Ich habe das alles in das enterFrame-Event gepackt weil die Funktion kontinuierlich abgearbeitet werden soll. Punkt 4 hatte ich gestern noch selbst schmerzhaft herausgefunden^^
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.155
Beiträge
2.581.854
Mitglieder
67.221
Neuestes Mitglied
opaklaus
Oben