Schließen eines Movieclips abfangen ? (AS 2)

k21karim

Grünschnabel
Hallo, ich möchte das schließen eines Movieclips abfangen. Nun gibt es ja schon onEnterFrame(), gibt es demnach auch eine Funktion wie onCloseFrame() / onCancelFrame()...?

Oder hat jemand eine andere Idee ?

Danke
 
Hey, kommt drauf an, was du mit "schliessen eines movieclips abfangen" meinst...

Also dass der movieclip bei seinem frame anhaelst machst du einfach ein stop(); in diesen frame, das ist wirklich die einfachste Methode :)

Falls du pruefen willst, ob der mc an seinem letzten frame angekommen ist, kannst du das mit mc-name._currentframe = framenummer in einer if-schleife tun.

Gruss Julian
 
Hi,

onEnterFrame hat ja (zumindest direkt) nichts damit zu tun, ob ein MovieClip "geöffnet" (instanziert) wird, in sofern wäre "onCloseFrame" wohl das falsche Wort. ;-)

Mir ist in AS2.0 kein Listener bekannt, der das Entfernen eines Objekts von der Bühne überwachen würde. Daher wird Dir wohl nichts anderes übrig bleiben, als die Existenz des betreffenden Clips kontinuierlich in kurzen Intervallen (setInterval) zu überprüfen, und Alarm zu schlagen, wenn das Objekt nicht mehr existiert.

Folgender Code könnte Dir weiterhelfen:
Code:
var watchList = new Array();

var watchIV = setInterval(this, "watchClips", 4);

function watchClips() {
	for (var i=0; i<watchList.length; i++) {
		if (!watchList[i]._src.getDepth()) {
			trace("Objekt " + watchList[i]._name + " entfernt");
			watchList.splice(i, 1);
		}
	}
}

function watchClip(obj) {
	if (!inWatchList(obj)) {
		watchList.push({_src:obj, _name:(obj._target)});
	}
}

function inWatchList(obj) {
	for (var i in watchList) {
		if (watchList[i]._src == obj) return true;
	}
	return false;
}

// Testen:

var mc1 = this.createEmptyMovieClip("mc1", 1);

var mc2 = this.createEmptyMovieClip("mc2", 2);

createBut(mc1);

createBut(mc2);

watchClip(mc1);

watchClip(mc2);

function createBut(obj) {
	obj.beginFill(0xFF0000, 100);
	obj.moveTo(0, 0);
	obj.lineTo(50, 0);
	obj.lineTo(50, 50);
	obj.lineTo(0, 50);
	obj.lineTo(0, 0);
	obj._x = Math.random() * Stage.width;
	obj._y = Math.random() * Stage.height;
	obj.onPress = function() {
		this.removeMovieClip();
	}
}

Gruß
.
 
Hmm, hab davor mit C++/MFC gearbeitet und da gibt es eine Funktion die OnCancel heißt :)
Naja, daneben getippt.

@ JimmyLikesSka & Tobias Menzel

Also das Problem ist, dass der MC, in welchem ich den Cancel-handler abfangen möchte, dynamisch mit attachMovie erzeugt wird. Und nun wird dieser MC, sobald ein anderer Menüpunkt gewählt wird, durch einen anderen MC ersetzt (auch mittels attachMovie).

Das mit setInterval ist ja kein Problem, aber wie prüfe ich denn in dem MC selbst, ob es noch vorhanden ist, oder mit removeMovieClip() bereits gelöscht wurde?`

PHP:
Interval = setInterval(checkWin, 10);

function checkWin()
{
	if(this == true)
        {
              //....
        }
}

das wird wohl kaum klappen :)
 
das wird wohl kaum klappen
Nein, denn wenn ein MC weg ist, ist er weg und kann auch nichts mehr ausführen. Du wirst die Existenz der Instanz von außen beobachten müssen.

Mal generell: Das Anwählen der Menüpunkte kannst Du ja abfragen - warum baust Du nicht dort eine Abfrage an, bevor Du einen MC durch einen anderen ersetzt?

Gruß
.
 
Naja, na klar könnte ich durch ne boolsche var in jedem Menüpunkt abfragen ob das MC noch besteht. Aber das ist doch zu viel hin und her mit dem code :) Dachte das könnte man leichter lösen.

Nochmal zur "setInterval-Taktik" :

Ich erstelle mein MC so :

PHP:
var MC:Movieclip = emptyMovieclip_mc.attachMovie("test_mc", "test_mc", 0);
MC._x = empty....
.....

Was muss ich da nun abfragen wegen der Existenz der Instanz? MC oder test_mc?
Wobei test_mc lediglich die Instanz ist und keine Variable

Hoffe du verstehst was ich meine...
 
Hi,

Nach dieser createEmptyMovieClip-Methode hast Du die Referenz in zwei Variablen stehen: MC und emptyMovieclip_mc.test_mc. Welche Du der Testmethode übergibst, ist irrelevant, da beide Variablen auf das selbe Objekt zeigen.

Gruß
.
 
Zurück