[MX] Probleme mit Funktion

killkrog

Erfahrenes Mitglied
Hi Gemeinde.
Brauch euch mal wieder...

Also, fangen wir gleich an. Ich habe eine Funktion gebaut, mit dem ich einen Schreibmschieneneffekt nachbauen will.
An sich funktioniert er schon. Hier das Script:
PHP:
MovieClip.prototype.schreibmaschine = function (mc, zeichen, speed) {
	geschrieben = undefined;
	n = undefined;
	schreibe = function () {
		if (n <= zeichen.length) {
			geschrieben += zeichen.charAt (n);
			n++;
			_root[mc] = geschrieben + "_";
		}
		if (this.n == zeichen.length) {
			geschrieben += zeichen.charAt (n);
			n++;
			_root[mc] = geschrieben;
			clearInterval (schreib_inter);
		}
	}
	schreib_inter = setInterval (schreibe, speed);
}

Aufgerufen wird das Ganze mit:
PHP:
schreibmaschine ("_root.ausgabe", "Der Text!", 30);

Mein Problem ist nun, dass ich nicht zwei Textfelder auf einmal vollschreiben lassen kann. Macht er einfach nicht. Immer nur ein.
Voran liegt das? Wie kann ich das beheben?

Danke schonmal im Voraus.

Bye,
Killy
 
PHP:
MovieClip.prototype.schreibmaschine = function (out1, out2, zeichen, speed) {
    geschrieben = undefined;
    n = undefined;
    schreibe = function () {
        if (n <= zeichen.length) {
            geschrieben += zeichen.charAt (n);
            n++;
            _root[out1].text = geschrieben + "_";
			_root[out2].text = geschrieben + "_";
        }
        if (this.n == zeichen.length) {
            geschrieben += zeichen.charAt (n);
            n++;
            _root[out1].text = geschrieben;
			_root[out2].text = geschrieben;
            clearInterval (schreib_inter);
        }
    }
    schreib_inter = setInterval (schreibe, speed);
}
schreibmaschine ("Ausgabe1", "Ausgabe2", "Der Text!", 30);

mit freundlichen Grüssen

B

P.S.: setzt zwei dynamische Textfelder mit Bezeichner Ausgabe 1 und 2 auf dem _root voraus, keine variablen dabei....
http://www.monalisaoverdrive.de/dual.fla
 
Zuletzt bearbeitet:
Das ist schon klar, da wöre ich auch drauf gekommen.
Aber ist trotzdem nicht, was ich will.

Ich will einfach schreiben können

_root.mc1.schreibmaschine (textfeld,"Text!", 30);
_root.mc2.schreibmaschine (textfeld,"Text!", 30);
_root.mc3.schreibmaschine (textfeld,"Text!", 30);
.
.
.

usw

Da häng ich grade und komm net weiter.
 
gleichzeitig, ungleichzeitig, zwingend mit demselben Text oder frei ? Du schreist doch auch immer nach präzision in der Problembeschreibung, das sollte auch für dich gelten, he, he ;) Ich denke mal der Knackpunkt ist das setInterval, das ja ein eigenständiges Objekt ist, das du überschreiben dürftest, wenn du es dreimal kreierst und dann auch noch mit demselben Namen..... ansonsten ICH KANN NICHT HELLSEHEN

GRüsse
B
 
Wenn ich die Scripts wie oben schreibe, werden sie gleichzeitig aufgerufen ;)
Das mit dem Text war vllt bissl ungenau, auf jeden Fall soll es ein verschiedener sein.
 
Hi,

mit einem Temp MC könnte man das ganze mehrfach nutzbar machen:

PHP:
TextField.prototype.schreibmaschine = function (zeichen, slow) {
	var mc = "txt_"+this._name;
	_root.createEmptyMovieClip(mc,tiefe++);
	_root[mc].zeichen = zeichen;
	_root[mc].slow = slow;
	_root[mc].txt = this;
	_root[mc].onEnterFrame = function() {
		if(getTimer()%this.slow==0) {
			if (this.n <= this.zeichen.length) {
				this.geschrieben += this.zeichen.charAt(this.n);
				this.n++;
				this.txt.text = this.geschrieben + "_";
			}
			if (this.n == this.zeichen.length) {
				this.geschrieben += this.zeichen.charAt(this.n);
				this.n++;
				this.txt.text = this.geschrieben;
				delete this.onEnterFrame;
				this.removeMovieClip();
			}
		}
    }
}

Ausgabe1.schreibmaschine("Der Text!", 10); // langsamer
Ausgabe2.schreibmaschine("Noch ein Text!", 1); // 1 = eingestellte fps
 
Zuletzt bearbeitet:
Respekt !

_root[mc].txt = this; als Rerenz auf das aufrufende Textfeld - geil

if(getTimer()%this.slow==0) { - kannst du mir das modulo mal näher erklären ?

Grüsse

B
 
Danke.

Leider klappt das mit getTimer nicht.

>> if(getTimer()%this.slow==0) { - kannst du mir das modulo mal näher erklären ?
Könnte man jede einzelne ms Abfragen, war es so gedacht:
Wenn die ms durch slow Rest Null ist, dann das Script ausführen.
Bei slow = 10 würde also alle 10ms ein Buchstaben hinzugefügt. Bei slow = 1, jede ms.

Da dies leider nicht geht, muß noch eine temp Variable hinzugefügt werden:
PHP:
TextField.prototype.schreibmaschine = function (zeichen, slow) {
	var mc = "txt_"+this._name;
	_root.createEmptyMovieClip(mc,tiefe++);
	_root[mc].zeichen = zeichen;
	_root[mc].slow = slow;
	_root[mc].txt = this;
	_root[mc].i = 0;
	_root[mc].onEnterFrame = function() {
		if(this.i%this.slow==0 && this.i>0) {
			if (this.n <= this.zeichen.length) {
				this.geschrieben += this.zeichen.charAt(this.n);
				this.n++;
				this.txt.text = this.geschrieben + "_";
			}
			if (this.n == this.zeichen.length) {
				this.geschrieben += this.zeichen.charAt(this.n);
				this.n++;
				this.txt.text = this.geschrieben;
				delete this.onEnterFrame;
				this.removeMovieClip();
			}
		}
		this.i++;
    }
}


Ausgabe1.schreibmaschine("Der Text!", 6); // langsamer
Ausgabe2.schreibmaschine("Noch ein Text!", 1); // 1 = eingestellte fps
 
Zuletzt bearbeitet:
...harter syntax, muss ich mir erst mal vergegenwärtigen, bzw modulo noch mal in der referenz nachschlagen, :p , mir ist nicht klar wie die Zuweisung der Zwischenwerte abläuft, aber echt inspirierend......

Grüsse B

P.S.: wars heute auf der flashilfe zu langweilig ? - hier is irgendwie auch kaum was los ...
 
_root[mc].onEnterFrame = function() {

Dem Temp MC wird die onEnterFrame Methode zugewiesen.
Innerhalb der Methode, bezieht sich this auf den angegebenen MC.

>> P.S.: wars heute auf der flashilfe zu langweilig ? - hier is irgendwie auch kaum was los ...
Doch doch, aber ich schau grad mal zwischen die Flash Foren, um zu sehen wie weit der AS 2.0 Wissenstand ist. Bin neugierig ;)
 

Neue Beiträge

Zurück