| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| lernwillig Registriert seit: May 2004 Ort: Berlin
Beiträge: 221
| Variable ausserhalb der fnc aufrufen
Hi, ich krieg einfach den inhalt meiner variable einfach nicht aus der function raus, weder mit return, _root, oder _global. Hat sicherlich mit dem intervall zu tun, aber komme nicht drauf was ich verändern muss. Was mach ich falsch? Code: var onInterval = function (tf) {
return test = "output";
};
var id = setInterval(onInterval, 5, this);
trace(test); vielen dank im vorraus gruss fabian Geändert von Bugfixer (16-08-2004 um 13:47 Uhr) |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Sep 2001 Ort: Neckarsulm
Beiträge: 273
|
Ich denke hier liegt ein allgemeines Verständnisproblem vor. Nehmen wir an du hast folgende Function: Code: function onInterval(tf) {
return "output";
}; Code: var result:String = onInterval("muh"); Code: var id = setInterval(onInterval, 5, this); Code: _root.test = "output"; |
| | |
| | #4 (permalink) | |
| lernwillig Registriert seit: May 2004 Ort: Berlin
Beiträge: 221
|
Hallo, das hat mir von der verständnis schon mal weitergeholfen. Zitat:
Hier ist mal das ganze script, ich benötige test nach dem intervalldurchlauf zu weiterverarbeitung. Code: TextField.prototype.deCript = function(myMsg) {
this.autoSize = true;
//
var i = 0;
var onInterval = function (tf) {
if (i<myMsg.length) {
var singleLetter = myMsg.substr(i, 1);
if (singleLetter == " ") {
singleLetter = " ";
} else {
singleLetter = "-";
}
tf.text += singleLetter;
test += singleLetter;
i++;
}
if (i == myMsg.length) {
return test;
clearInterval(id);
}
};
var id = setInterval(onInterval, 5, this);
trace(test);
// Hier benötige ich test zur weiterverarbeitung
};
// Aufruf
var message1 = "Dies ist mein aufzubauender Text";
this.createTextField("myTxt1", 1, 0, 0, 1, 1);
myTxt1.deCript(message1); Fabian | |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Sep 2001 Ort: Neckarsulm
Beiträge: 273
|
Eine Methode direkt in die TextField Klasse zu setzen ist nie sauber. ![]() Sauber wäre es wenn du eine eigene TextField Klasse schreibst, diese dann die eigentlich TextField Klasse erweitert. Dann musst du nur noch dein Textfeld mit dieser Klasse registrieren. In dieser Klasse legst du eine Instanzvariable Namens test an. Dann deine Methode deCript() und noch eine Methode die z.B. onInterval() heißt (ein mehraussagender Name wäre besser). Dann setzt du das Interval nicht via: setInterval(onInterval, 5, this); sondern via: setInterval(this, "onInterval", 5);. Jetzt wird die Methode onInterval() auf this aufgerufen. Dann benötigst du das Argument nicht, weil this in der Methode auf das Textfeld verweist und außerdem kannst du über this.test = "output" deine Varaible setzen. Das wäre eine schöne objektorientierte Methode, wobei du natürlich einen etwas größeren Aufwand treiben musst. |
| | |
| | #6 (permalink) |
| querdenker Registriert seit: Jun 2001 Ort: formel1-stadt hockenheim
Beiträge: 4.731
|
davon ab... 5 ist kein interval den flash noch korrekt hinbekäme...iss viel zu kurz... und , noch wichtiger... wenn du einen return setzt wird alles danch nicht mher ausgeführt... oben in deinem bsp setzt du einen return und versuchst dann den interval zu löschen... des geht net...*mal anmerk* ansonsten hat MiM ja schon das wesentliche gesagt... greetz kelor |
| | |
| | #7 (permalink) | ||
| lernwillig Registriert seit: May 2004 Ort: Berlin
Beiträge: 221
|
Ah ok, ich verstehe jetzt zwar was ich machen soll und auch das warum ist mir klar, allerdings noch nicht das wie. Besonders dieser part: Zitat:
@kelor: Habe während der suche nach ner lösung auch gesehen, das 5 viel zu kurz für ein intervall ist, aber danke nochmal ![]() Zitat:
Gruss Fabian Geändert von Bugfixer (16-08-2004 um 16:49 Uhr) | ||
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Sep 2001 Ort: Neckarsulm
Beiträge: 273
|
Genau, eine neue Klasse mit class, die TextField erweitert. Aber es gibt noch eine Kleinigkeit, die ich ganz vergessen hab, neben dem, was Kelor oben schon erklärt hat bezüglich return etc. TextField.prototype.deCript = function(myMsg) { var onInterval = function (tf) { ... }; var id = setInterval(onInterval, 5, this); trace(test); // Hier benötige ich test zur weiterverarbeitung }; Wenn du die Variable in der Methode onInterval() setzt, sei es auf _root oder auf dein Textfeld, wird sie dir trotzdem nie an der Stelle zur Verfügung stehen, an der du gerade trace(test) stehen hast. Die Methode onInterval() wird ja erst nach 5 Millisekunden aufgerufen (zumindest theoretisch) und in dieser Zeit ist die eigentliche Methode deCript() schon lang durchgelaufen. Die Ausführung der Methode wird bei setInterval() nicht angehalten sondern einfach fortgeführt. Also setInterval() != Pause. Wenn du die Verzögerung von 5 ms haben möchtest muss setInterval() also eine andere Methode aufrufen, und dieser dann den Wert von Variable test als Argument übergeben. |
| | |
| | #9 (permalink) |
| lernwillig Registriert seit: May 2004 Ort: Berlin
Beiträge: 221
|
Vielen dank für die zahlreichen erklärungsversuche. Aber könnte mir bitte wer das anhand meines scriptes zeigen? Ich lerne am besten aus beispielen und tue mich mit den theoretischen beschreibungen leider etwas schwer. Vielen dank Gruss Fabian Geändert von Bugfixer (17-08-2004 um 14:53 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |