prototype

Hallo,

die Intervalle werden nicht mehr gelöscht, weil der Identifier nicht mehr gültig ist. Dazu musst du folgendes wissen:
Die Verwendung von "var" ausserhalb eines Funktionsbodys instanziert eine bleibende Variable, einen sogenannten Member, der auch zu einem späteren Zeitpunkt über entsprechenden Pfad angesprochen werden kann. Verwendest du "var" jedoch in einer Funktion, ist die Variable nur für den Funktionsbody gültig und wird nach dem Abarbeiten sämtlicher Anweisungen verworfen. Man verwendet in diesem Zusammenhang auch die Begriffe globale und lokale Variablen (Achtung, das hat nichts mit _global oder ähnlichem zu tun).

Auf dein Problem angewendet heisst das, dass deine Identifier, die du in einem Funktionsbody mit var instanzierst, nachher nicht mehr gültig sind, ergo auch nicht mehr gelöscht werden können.
Code:
 var intervall_ausblenden = setInterval(_root.ausblenden(ausblendenschritte),1000);
Wenn du die Variablen mit this instanzierst, dürfte das Problem gelöst sein:
Code:
 this.intervall_ausblenden = setInterval(_root.ausblenden(ausblendenschritte),1000);

Zum Wabber-Tutorial:
Das sind Variablen, die zur Berechnung des Effekts verwendet werden, also kein Member der MovieClip-Klasse und deshalb sicher nicht in der Referenz aufgeführt.

gruss
 
Zusatz:

Da die Funktionen "einblenden" und "ausblenden" als Member der Hauptzeitleiste erstellt wurden, beziehen sie sich natürlich auch auf die Hauptzeitleiste.

Zudem:
Code:
this._root
ist das selbe wie
Code:
_root

Um jeden Clip einzeln blenden zu können, müsstest Du diese beiden Methoden ebenfalls als Member der MovieClip-Klasse anlegen:
Code:
MovieClip.prototype.ausblenden = function(ausblendenschritte) {
  ...

Gruß
.
 
@tobias und luke

ich bedanke mich schon einmal bei euch beiden. Werde das heute Abend testen und gebe euch dann kurz Bescheid.

Vielen Dank
 
So, ich habe mal die Änderungen vorgenommen. Nun wird nicht mehr der gesamte Film ausgeblendet, aber so richtig funktionieren tut es leider auch nicht.
Es scheint so, als ob sich die durch die MCs mehrfach aufgerufene Funktion fading() sich gegenseitig in die Quere kommt...

Ich habe hier mal die fla (MX-Version).

Vielen Dank für eure Hilfe.
 

Anhänge

  • fading_test.zip
    3,7 KB · Aufrufe: 14
Also ich hab jetzt gestern Abend die ganze Zeit nach dem Fehler geschaut und kann ihn einfach nicht finden. Wäre toll wenn jemand mir bei der Lösung helfen könnte.

Ich danke euch!

Viele Grüße
DJ Trancelight
 
Hallo,

das ist nun vielleicht pädagogisch nicht ganz so sensibel, aber ich hab dein Konzept in einen einzelnen Prototype gepackt, der folgende Parameter benötigt:

1. geschwindigkeit: Anzahl Schritte, in der die Animation ausgeführt werden soll.

2. ms: Intervall-Geschwindigkeit in Millisekunden.

3. init: Startwert für _alpha.

4. end: Endwert für _alpha.

Code:
MovieClip.prototype.fading = function(geschwindigkeit, ms, init, end) {
		
	this.geschwindigkeit = geschwindigkeit;
	this.init = init;
	this.end = end;
	
	this._alpha = init;
	this.schritt = (end-init)/geschwindigkeit;
	this.i = this.geschwindigkeit;
	
	this.fadingExec = function () {
		if (this.i-- > 0) this._alpha += this.schritt;
		else {
			clearInterval(this.interval);
			this._alpha = this.end;			
		}
	}
	this.interval = setInterval(this, "fadingExec", ms);
}
Als Tipp: Prototypes müssen für mich in sich abgeschlossene Funktionen sein, die ich mit ein paar Parametern aufrufen kann und bei denen ich nicht noch zusätzliche externe Faktoren, Kontroll-Variablen usw. zu überprüfen brauche. Sozusagen das Streben nach dem kleinsten gemeinsamen Nenner, so dass ich z.B. diese Fadings auf jeden MovieClip anwenden kann, ohne mir zu überlegen, welche Zeitleiste nun welche Durchlaufskontrollen ausführt usw.

gruss
 
Hi,

zunächst müsste der Aufruf im Prototype so aussehen:
Code:
this.interval = setInterval(this, "ausblenden", 3, ausblendenschritte);

Dann ist mir aber nicht klar, was Du mit der Variable "anzahl" bezweckst, und warum diese (und "durchlauf" sowie "schalter") global auf der Hauptzeitleiste definiert ist, wenn Du doch einen Prototype erstellen möchtest, der Clips unabhängig von einander animiert.

Zusätzlich ist so etwas:
Code:
onClipEvent(enterFrame) {
	this.fading(1,2,2);
}
auf einem MC Unsinn, da Du damit die Funktion mit jedem Frameaufruf (bis ins Unendliche) neu startest.

Beschreibe bitte noch einmal genau, welches Verhalten Du Dir für Deine MovieClips vorstellst, denn ich habe das Gefühl, was Du vorhast, lässt sich um einiges einfacher realisieren.

Gruß

EDIT: da hat Luke uns die Arbeit schon abgenommen - auf etwas ähnliches wollte ich hinaus. ^^
.
 
So Leute, ihr seit einfach spitze!

Vielen lieben Dank für eure Hilfe und die tollen Erläuterungen. Am WE habe ich etwas mehr zeit mir das genaustens anzuschauen und durchzugehen.

@Luke: Das sieht prima aus und deine Erläuterung wie ein Prototyp eigentlich zu funktionieren hat ist mir einleuchtend. Nun ja, es ist mein erster Versuch mit dem Prototyp gewesen und wollte einfach auch einen für mein MX haben, weil deiner nur mit MX 2004 geht.
Also wie schon gesagt, am WE geh ich dein Script genaustens durch:)

@Tobias
PHP:
Dann ist mir aber nicht klar, was Du mit der Variable "anzahl" bezweckst, und warum diese (und "durchlauf" sowie "schalter") global auf der Hauptzeitleiste definiert ist, wenn Du doch einen Prototype erstellen möchtest, der Clips unabhängig von einander animiert.

Also ich verstehs ja auch nicht was ich da gemacht habe :D Das war noch aus dem verzweifelten Versuch, weil der Prototyp den gesamten Film gefadet hat und nicht die MCs. Das ist echt Blödsinn - jetzt seh ich es auch.


PHP:
Beschreibe bitte noch einmal genau, welches Verhalten Du Dir für Deine MovieClips vorstellst, denn ich habe das Gefühl, was Du vorhast, lässt sich um einiges einfacher realisieren.

Da hast du absolut recht. Ich denke da meistens viel zu kompliziert.

Meine Idee war einfach, die Schlüsselbildertweenings mit AS zu ersetzen. Die Übergabevariable anzahl war für die Anzahl der Wiederholungen gedacht, also z.B. so:

Rechteckt einmal ausblenden dann einblenden - fertig
Schriftzug alpha soll 2 aus- und eingeblendet werden.
Die globale Variable durchlauf sollte überprüfen, ob die die anzahl der Durchläufe abgearbeitet wurde und somit das fading beendet werden kann.


Das Problem mit den AS-Fadings ist, dass ich z.B. nicht sagen kann, dass ein Ausblenden bei Bild 60 auf der Zeitleiste beendet sein muss. Aber so wie Luke das beschrieben hat, müßte das ja jetzt gehen.

Also ich melde mich spätestens nach dem WE wieder und bedanke mich schon mal für eure tolle Unterstützung!

Viele Grüße an euch beide und nice WE.
 
Hallo Luke,

damit meinte ich nicht diesen, sondern den, der hier im Forum zur Verfügung gestellt wurde. Da steht ab Flash MX 2004. Deshalb bin ich ja auf die Idee gekommen mir selbst einen für MX zu basteln.
Viele Grüße und nice WE.
 

Neue Beiträge

Zurück