MovieClip ohne Klassen initializieren

PixelShader

Erfahrenes Mitglied
Hallo allerseits,

Ich suche nach einer moeglichkeit, in einen Library-eintrag so zu gestalten, dass beim dynamischen erstellen via actionscript, variablen oder functionen sofort verfuegbar sind.
Was ich meine ist, wenn ich in einen clip im ersten frame schreibe
Code:
function f()
{
 return 0;
}
und dann irgentwo steht
Code:
mc = attachMovie("mymc_id", "_mc", 1); // diesen movieclip erstellen
trace(mc.f()); // das gibt undefined, denn der erste frame wurde noch nicht aktiviert

Ich weiss dass man eine Klasse erstellen kann und da onLoad, bzw. direkt die funktionen definieren kann, aber ich will nicht extra fur eine variable oder funktion fur jeden Clip eine eigene Klasse erstellen (also auch eine eigene Datei ... vielzuviel). gibt es also eine andere initialisierungsmoeglichkeit?
 
Hi,

Code in per AS instanzierten Objekten wird erst vor dem nächsten Frameaufruf geparst.

Ich helfe mir damit aus, vor dem Aufruf solcher Methoden einen Frame zu warten:
Code:
var foo = this.attachMovie("foo", "foo", 1);
this.onEnterFrame = function() {
    trace(foo.bar());
    delete this.onEnterFrame;
}

In den meisten Fällen geht es bei mir darum, neuen Clips bestimmte Werte zuzuweisen, auf die diese dann reagieren. auch "watch" reagiert erst einen Frame später, also warte ich in den instanzierten Clips oft per onEnterFrame darauf, dass die Variablen gesetzt sind:
Code:
var foo = this.attachMovie("foo", "foo", 1);
foo.initVar = "Hallo Welt";
Code:
// im MC "foo":

this.onEnterFrame = function() {
    if (initVar != undefined) {
        delete this.onEnterFrame;
        trace(initVar);
        // weitere Einstellungen ...
    }
}

Gruß
.
 
geniale Idee mit dem onEnterFrame.. hab gleich mal ausprobiert, und es funktioniert nicht ganz perfekt, nach dem erstellen erscheint mc naemlich einmal uninitializiert auf der szene, und wird nur nach einem Frame richig angezeigt. Naja ist ja auch logisch, onEnterFrame setzt erst im naechsten Frame ein.

Ausprobiert habeich bereits schon sowas wie dem Symbol in der Bibliothek am anfang des Films einen init() zu verpassen

Code:
attachMovie("id", "_mc", 1);
_mc.__proto__.init = function(){
  // initializierung
};
_mc.removeMovieClip();
Code:
mc = attachMovie("id", "_mc", 1); // das kennen wir schon
mc.init();
aber dann wuerde der code fur die initializierung des Clips ausserhalb des clips selbst sein, das ist organisatorisch schlecht.

hat jemand vieleicht eine andere Idee?
oder kennt jemand vielleicht einen weg wie man aus einem MovieClip auf einem bestimmten frame den code ausfuehren koennte? "call" klappt bei mir nicht, es holt bei mir immer nur code aus dem _level0 objekt.
 
Hi,

Du kannst nur Code ausführen, der in Objekten (sprich: Zeitleisten) liegt, die sich im aktuellen Frame befinden und auch nur den in den aktuellen Frames der betreffenden Objekte.

Wenn sich bei Deinen MCs optisch was ändert, könntest Du sie auch erst einen Frame später anzeigen:
Code:
// Code im zu instanzierenden Objekt:
this._visible = false;

function dieAuszufuehrendeFunktion(und, ihre, Parameter) {
    // mach was auch immer ...
    this._visible = true; // hier erst anzeigen
}
Die Verzögerung von einem Frame dürfte eigentlich nicht auffallen.

Gruß
.
 
Zurück