Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX 2004

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-01-2008, 11:15   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 5
Question onLoadInit, mc dennoch nicht initialisiert?

Hallo,

ich habe ein Problem innerhalb eines größeren Projekts, bei dem (Sub)SWFs per MovieClipLoader in eine (Haupt)SWF eingeladen werden. Das funktioniert soweit auch. Jetzt soll im SubSWF eine Funktion "init" aufgerufen werden, die im ersten Frame des SubSWFs definiert wird.

Das Konstrukt sieht also etwa so aus:
Code:
var mcl:MovieClipLoader = new MovieClipLoader();
var mclisten:Object = new Object();
mclisten.onLoadInit = function(pClip) {
  mcldone(pClip);
}
...
mcldone = function(pClip) {
  ...
  func = pClip[elements[0]]; // elements[0] = 'init'
  func.apply(pClip, args); // args wird irgendwo erzeugt
  ...
}

mcl.loadClip(...);
Jetzt dachte ich, dass bei Aufruf von onLoadInit der geladene MC auch wirklich komplett initialisiert ist. Ist er auch fast immer, das ganze funktioniert also. Nur leider nicht beim ersten Aufruf. Da streikt das ganze.

Ein Trace zeigt, dass
func = _level0.box2.content[init]
(so die Hierarchie des MCs) beim ersten Mal undefined ist und beim zweiten Mal vom Typ Function ist...

Hat jemand eine Idee?
Eskayp ist offline   Mit Zitat antworten
Alt 08-01-2008, 11:23   #2 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.654
Schreibst du so:

PHP-Code:
var mcl:MovieClipLoader = new MovieClipLoader();
var 
mclisten:Object = new Object();
mclisten.onLoadInit = function(pClip) {
  
mcldone(pClip);
}
...
function 
mcldone(pClip) { // Hier ändern
  
...
  
func pClip[elements[0]]; // elements[0] = 'init'
  
func.apply(pClipargs); // args wird irgendwo erzeugt
  
...
}

mcl.loadClip(...); 
Mit diesem Syntax werden alle functions erfasst, bevor das Script von oben nach unten durchgearbeitet wird. Sollte dann eigentlich gehn.
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 08-01-2008, 13:53   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 5
Danke für Deine Antwort, Weidler... hat aber leider nichts gebracht.

Das Problem ist auch nicht, dass die Funktion mcldone nicht aufgerufen wird, sondern die Zeile
PHP-Code:
func pClip[elements[0]]; 
schlägt fehl (bzw. func == undefined).

In Kürze also:
Code:
- In pClip wird per MovieClipLoader eine SWF geladen.
- Im onLoadInit-Event wird versucht mit
    pClip[functionName].apply
  eine Funktion im ersten Frame der SWF anzusprechen.
- Dies funktioniert in der Regel, aber nicht beim allerersten Aufruf
- woran liegt's?
Mein "Codeausschnitt" von oben ist übrigens auf mehrere Frames in der Hauptzeitleiste des HauptSWFs verteilt... das oben ist also nur eine "vereinfachte Darstellung".
Eskayp ist offline   Mit Zitat antworten
Alt 08-01-2008, 14:53   #4 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.654
Hmm. Dann würde mir jetzt auch nichs schlaueres einfallen, als mit setInterval oder Ähnlichem in deine mcldone noch eine kurze Verzögerung einzubauen, falls das onLoadInit tatsächlich vor dem Durchlaufen des Scripts im ersten Frame des geladenen Films gefeuert wird.

Ist aber seltsam, mir wäre das noch nie aufgefallen.

Das in deinem Codeschnipsel das Listener-Objekt nicht der MovieClipLoader-Instanz zugeordnet wird, ist aber nur ein copy/paste-Fehler, oder? Kann eigentlich auch gar nicht anders sein, sonst würds ja gar nicht gehn.
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 08-01-2008, 16:24   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 5
Finde ich auch sehr seltsam. Zumal das Problem (glaube ich) erst auftaucht, seit wir ein Flash-Banner eines anderen Unternehmens mit in die Animation eingebaut haben. Das wird ebenfalls als SWF eingeladen und verlangsamt die HauptSWF enorm. Ich hab's schonmal mit Interval probiert, aber vielleicht die Zeit zu kurz gewählt...
Eskayp ist offline   Mit Zitat antworten
Alt 10-01-2008, 11:30   #6 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.825
werden mit dem mcl mehrere swf in einer Schleife geladen?
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 23-01-2008, 16:22   #7 (permalink)
Neuer User
 
Registriert seit: Mar 2004
Beiträge: 8
Ich habe exakt das gleiche Problem, daß ein onLoadInit getriggert wird, ich aber eine im ersten Frame des nachgeladenen Clips definierte Funktion nicht aufrufen kann. Dies geschieht auch bei mir nur beim ersten mal.

In meinem Fall habe ich jetzt die Antwort gefunden (glaub ich jedenfalls). Ich verwende nämlich eine Shared Library in den Clips, die ich nachlade und irgendwie muss das wohl die Ursache des Fehlers sein. Folgender Link ist zwar wie es aussieht keine Flash Experten Seite, aber dort hat jemand zumindest die gleiche Beobachtung gemacht: http://readlist.com/lists/chattyfig....s/2/14030.html

"Another thing that might have an impact on the firing of onLoadInit is if a shared library is referenced by the swf. If I remember right, MovieClipLoader will load the swf but not its shared libraries. Thus there is an extended delay after loading in which the first frame cannot execute because it needs to load any items in a shared library (if referenced on that frame). I believe one of my coworkers noticed that in this case, onLoadInit occurs before the first frame executes as well. So beaware that the shared library thing can have a negative effect even if all swfs come from the same server and are the same version"

Verwendest du evtl. auch eine Shared Library?

Gruss
Marcus
vurtual ist offline   Mit Zitat antworten
Alt 24-01-2008, 07:41   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 5
Argh, jetzt wo Du's sagst, fällt mir ein, dass das erste Auftauchen des Fehlers ungefährt mit Einführung der Shared-Library zusammen liegt. Also: Ja, ich verwende ebenfalls eine Shared-Library.

Damn. Und nu? Hatte der Kollege auch einen Lösungsansatz? Wir haben uns jetzt für's erste so beholfen, dass die benötigte Funktion hard-coded aufgerufen wird. Eigentlich sollte die Funktion nach Parsen einer XML-Datei geladen werden, in der der Funktionsaufruf enthalten ist. Im weiteren Verlauf funktioniert das ja auch, nur eben beim ersten Mal nicht.

Bringt es vielleicht was, wenn ich die Shared-Library im Main-Movie quasi "preloade" (durch Einbettung aber Nicht-Verwendung)? Muss ich mal ausprobieren, wenn ich ein bisschen Zeit habe.

Ach ja, hab ganz vergessen Majo zu antworten:
Ja, ich lade mehrere SWF in einer Schleife. Allerdings wird dabei ein Array sukzessive abgebaut und immer erst das onLoadInit des vorherigen SWF abgewartet, bevor der MCL mit einem neuen Auftrag gefüttert wird. Daran kann es also nicht liegen, zumal das onLoadInit ja auch gefeuert wird (laut Trace).

Geändert von Eskayp (24-01-2008 um 07:46 Uhr)
Eskayp ist offline   Mit Zitat antworten
Alt 24-01-2008, 11:17   #9 (permalink)
Neuer User
 
Registriert seit: Mar 2004
Beiträge: 8
Puh, da bin ich ja froh, daß es auch bei dir an der Shared Library liegt. Natürlich finde ich das Problem ansich mies aber so weiss man wenigstens, daß es damit zusammen hängt.

Also ich habe mir jetzt so beholfen, daß ich bei onLoadInit eine andere Funktion aufrufe, die eine kurze Wartepause macht (durch Zählen eines Wertes onEnterFrame) und dann erst die Funktion aufrufe, die ich eigentlich bei onLoadInit ausführen wollte. Das funktioniert dann zwar, aber es ist natürlich eine ganz schmutzige Lösung

Der eigentliche Wert des onLoadInit Events geht damit verloren und im Prinzip ist das wieder die Prozedur, die ich früher immer durchgezogen habe

Bei mir geht das auch noch problemlos, da meine Anwendung nicht im Web liegt sondern 'ne Offline Anwendung ist.. da weiss man ja, daß die Shared Library auch fix geladen ist.

Du könntest im ersten Frame ganz unten im Code eine Variable setzen und in deiner Pausen/Zählfunktion den Wert der Variable erfragen. So wüsstest du, wenn die Variable den erwarteten Wert hat, daß der Code des ersten Frames geladen wurde. Gaaanz reudiges Old School Coding

Gruß
Marcus
vurtual ist offline   Mit Zitat antworten
Alt 25-01-2008, 07:54   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 5
Oha, ok... ist eine Möglichkeit, die ich demnächst im Loader implementieren werde.
Eskayp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele