Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-10-2004, 08:19   #1 (permalink)
Nord-Workoholic
 
Benutzerbild von TinKim
 
Registriert seit: Mar 2004
Ort: Kiel
Beiträge: 937
Question Hauptfilm soll nach Preload eines MCs durch MC gesteuert werden, läuft aber weiter

Moin!

Ich bin zwar kein Anfänger im Programmieren, aber offenbar schickt mich ActionScript in eine andere Welt, oder ich bin einfach mal wieder blind. Vielleicht ist auch die Strategie grundsätzlich falsch. Naja, hier also mein Vorhaben:

Ich habe einen Hauptfilm, der ein Textfeld für Loader-Nachrichten und einen Preloader in Form eines einfachen Rechteckes bereitstellt.
Die Textfeldinstanz ist als loaderText und der Loader-Clip als mc_loader benannt.
Dann ist da noch ein MC namens mc_theme, der ein Hintergrundbild aus einem externen .swf darstellen soll, in dem viele Bilder gespeichert sind, von denen eines per Zufall angezeigt werden soll.

Der Hauptfilm setzt im ersten Bild die Startwerte und lädt die externe .swf in mc_theme. Das sieht dann so aus:

FRAME 1:
PHP-Code:
System.useCodepage true;
// ein Viereck, das zu Testzwecken später wieder eingeblendet wird
mc_test._visible false
mc_loader._visible false;
mc_loader._xscale 0;
loaderText._visible false;
// 11 Bilder sind in der externen .swf enthalten, das erste Bild beginnt aus Preloader-Zwecken bei Frame 2.
randTheme random(11) + 2
themeLoaded false;
loadMovie("flash/theme.swf"mc_theme); 
Der Hauptfilm soll in einem der darauf folgenden Frames (Frame 5, daher gotoAndPlay(6);) per stop(); einfach angehalten werden, bis der Inhalt in mc_theme vollständig geladen ist. Das sieht so aus:

IN mc_theme
PHP-Code:
onClipEvent(enterFrame) {
    
_root.loaderText._visible true;
    
_root.mc_loader._visible true;
    
_root.loaderText.text "Preloading Theme...";
    
theBytesLoaded this.getBytesLoaded();
    
theBytesTotal this.getBytesTotal();
    
_root.mc_loader._xscale = (theBytesLoaded theBytesTotal) * 100;
    if (
theBytesLoaded == theBytesTotal) {
        
_root.mc_loader._visible false;
        
_root.loaderText._visible false;
        
this.gotoAndStop(_root.randTheme);
        if (
_root.themeLoaded == false) {
            
_root.themeLoaded true;
            
_root.gotoAndPlay(6);
        }
    }
    else {
        
this.gotoAndStop(1);
    }

mc_theme wird im ersten Bild solange angehalten, bis der Inhalt vollständig geladen ist. Dann wird die Variable themeLoaded im _root true gesetzt, um genau einmal im Hauptfilm an eine Stelle zu springen, damit es im Hauptfilm weitergeht. Der Hauptfilm läuft aber schon vorher bis zum letzten Frame durch, selbst, wenn auf dem Weg dorthin ein stop(); in einem Frame steht. Und das versteh ich einfach nicht.

Im letzten Frame habe ich zu Kontrollzwecken ein Viereck unten rechts eingeblendet, das meiner Auffassung aber erst eingeblendet werden dürfte, wenn dem Hauptfilm erlaubt wird, dorthin zu wandern. Der Hauptfilm läuft aber einfach durch.

Bin ich jetzt grundsätzlich auf dem falschen Dampfer, oder wo liegt mein Problem? So sieht es "live" aus:

http://youngvisions.net/testp/

Das Viereck unten rechts dürfte nicht schon nach knapp 2 Sekunden erscheinen, sondern erst nach dem vollständigen Laden des Clips. Wenn jemand den eingebetteten 1 MB großen Clip schneller lädt, ist die Demo natürlich nicht funktional.

Und hier meine Quelldateien zum Download, damit ist es vermutlich am einfachsten nachzuvollziehen.

http://youngvisions.net/temp/forum/yvnet.zip

Jetzt bin ich gespannt, ob meine grundsätzliche Strategie falsch ist, oder ob einfach nur ein Brett vorm Kopf habe.

Herzlichen Dank und viele Grüße,

Kim

Geändert von TinKim (18-10-2004 um 09:13 Uhr)
TinKim ist offline   Mit Zitat antworten
Alt 18-10-2004, 12:38   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Ich würde es mal mit einer anderen Strategie versuchen: zuerst einmal solltest du den loadMovie als MC-Eigenschaft verwenden und den Objektpfad komplett voranstellen, also:
ActionScript:
  1. this.mc_theme.loadMovie("flash/theme.swf");
Danach würde ich gleich dahinter einen Preloader setzen, der von "außen" das Nachladen des MCs überwacht, z.B.
ActionScript:
  1. this.onEnterFrame = function(){
  2.     var fin = int(_level0.mc_theme.getBytesLoaded()*100/_level0.mc_theme.getBytesTotal());
  3.     trace("fin="+fin);
  4.    
  5.    
  6.     if(fin >= 100 && _level0.mc_theme._width > 0 && _level0.mc_theme._height>0) {
  7.                 delete this.onEnterFrame;
  8.                 //hier geht es dann weiter, z.B.
  9.                 _level0.gotoAndPlay(6);
  10.                
  11.  
  12.     }
  13. }
  14. this.stop();
  Mit Zitat antworten
Alt 18-10-2004, 12:46   #3 (permalink)
Nord-Workoholic
 
Benutzerbild von TinKim
 
Registriert seit: Mar 2004
Ort: Kiel
Beiträge: 937
Danke schon mal für den Hinweis dazu, wie es "sauberer" zu gestalten ist. Auf so etwas lege ich in meinen Elementen (X)HTML, CSS, PHP/MySQL und Delphi sehr großen Wert.
Ich glaube indes, dass meine dargestellte Programmierung nicht funktioniert, weil ich aus Flash MX 2004 Professional als Flash Player 6 exportiert habe. Ich habe es nun noch einmal alles von vorn geschrieben, und es funktioniert tadelos.
Allerdings mag ich kaum glauben, dass es daran gelegen hat.
Ergo vergesse ich lieber das Problem und baue weiter auf dem auf, was hier gerade bei mir funktioniert.

Danke für Deinen Hinweis.

Gruss,

Kim
TinKim 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:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele