Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-12-2005, 12:52   #1 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Mehrere MC mit LoadMovie übereinander

Hallo Leute,

die Suche habe ich verwendet und auch fast Lösungen gefunden. Nur leider kann ich die ZIP-Dateien nicht öffnen, in denen sich die Lösungen befinden

Über eine Navigation, die sich im Hauptfilm befindet, möchte ich div. SWF in einen leeren MC laden. Bei jedem weiteren Klick auf irgendeinen Button soll der neue MC über dem alten abgespielt werden. Bei mir verschwindet allerdings immer das alte MC und dann wird erst das neue geladen.

Hierzu habe ich folgendes Script erstellt:

In der Hauptzeitleiste wird die Variabele
Code:
ebenenZaehler = 0
gesetzt.
Bei jedem Klick auf einen Button wird diese Var hochgezählt, um eine Ebene höher zu erscheinen. Das will aber nicht

Code:
on(release)
{
	++ebenenZaehler;
	_parent.content.loadMovie("news_mc.swf",eval("_level" + ebenenZaehler));
}
Hätte jemand kurz Zeit mir auf die Sprünge zu helfen?

Danke
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 12:57   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!
Wenn du die auf Level laden willst, dann so:
PHP-Code:
on(release)
{    
    
loadMovieNum("news_mc.swf",++ebenenZaehler);

Ansonsten kannst du die natürlich nicht in einen MC nachladen, sondern musst für jeden Film einen eigenen anlegen.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:04   #3 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Danke erstmal.
Dann verstehe ich das mit den Levels wohl nicht. Ich dachte das _levelN angibt, welche z.B. SWF-Datei über der anderen innrhalb eines MC liegt.
Gehe ich da falsch in der Annahme?
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:19   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Also: Je MC nur eine Datei nachladbar.
Generell gibt's dein_mc.loadMovie("deine.swf") wobei "dein_mc" der MovieClip ist, in den du nachlädst oder loadMovieNum("deine.swf",1) um den Film auf Level 1 zu laden.
Einen leeren MC erstellst du mit createEmptyMovieClip("mc",1) wobie hier die 1 die Tiefe im Hauptfilm ist (wieder was anderes als ein Level). createEmptyMovieClip("mc1",2) liegt dann über dem vorher erstellten MovieClip ("mc").

Kann man das verstehen? Sonst gibt's ja noch die Flashhilfe...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:22   #5 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Ja, gehst du!
_levelN ist die Ebene... analog den Ebenen, wenn du mit Flash normal arbeitest (also nicht im ScriptEditor). Dabei hast du Level von 0 bis 99 zur Verfügung. Die Tiefe gibt die Reihenfolge innerhalb einer Ebene an... das Spektrum reicht da von ~ -16000 - 16000 (glaub ich zumindest). Somit hast du 100 Level mit jeweils ~32000 Tiefen sprich 3,2 mio. Möglichkeiten Bilder übereinander zu stapeln, ohne dass ein Bild ausgetauscht wird...
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:29   #6 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Zitat:
Zitat von bamboocha
Dabei hast du Level von 0 bis 99 zur Verfügung...
Aha...
PHP-Code:
for (var 100x<200x++) {
    
loadMovieNum("1.jpg"x);

__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:40   #7 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Danke. Benötige aber weitere Hilfe, wenn jemand noch Lust hat ^^

Jetzt habe ich es mal andersherum versucht:

Die Var ebenenZaehler steht weiterhin auf der Hauptzeitleiste.

Nun erstelle ich einen MC innerhalb meines leeren Content MCs und zaehle dabei bei jedem weiteren Klick jeweils ein Level höher.

Das Ganze sieht dann wie folgt aus:
[CODE]
on(release)
{
z = ++_root.ebenenZaehler;
_root.content.createEmptyMovieClip("subContent" + z ,z);
tmpMC = eval("_root.content.subContent" + z);
tmpMC.loadMovieNum("profil_mc.swf",z);
}
CODE]

Leider funktioniert das auch noch nicht. Wo habe ich hier den Denkfehler?
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:42   #8 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Weil loadMovieNum auf LEVEL läd und nicht in MovieClips!!!
PHP-Code:
tmpMC.loadMovie("profil_mc.swf"); 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-12-2005, 13:48   #9 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Was für eine schwere Geburt
Vielen Dank für die Unterstützung. Bei dem Ganzen hin und her habe ich dann letztendlich LoadMovie und loadMovieNum nicht mehr unterschieden. Wenn ich das richtig verstehe, kann man loadMovieNum nur in Verbindung mit der Hauptzeitleiste verwenden, wobei dann der gesamte Film überdeckt werden würde.

Naja, jetzt bin ich wenigstens mal einen Schritt weiter beim Programmieren in AS.

Beste Grüße
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 14:28   #10 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Ok, soweit so gut. Jetzt funktioniert das alles einwandfrei bis auf das Problem mit der Performance. Ich versuche nun die darunterliegenden MCs mit unloadMovie(); zu entfernen. Ich möchte bewirken, dass darunterliegende MC erst entfernt werden, wenn das darüberliegende geladen wurde.
Jetzt habe ich folgendes Script geschrieben, wobei es mir vorkommt, als ob es nicht funktioniert
Bei jedem Aufruf wird der Film langsamer. Wie kann ich überprüfen, ob ein Film noch existent ist?

Hier mein Script:
Code:
on(release)
{
	zCurrent = _root.ebenenZaehler;
	z = ++_root.ebenenZaehler;
	_root.content.createEmptyMovieClip("subContent" + z ,z);
	tmpMC = eval("_root.content.subContent" + z);
	tmpMC.loadMovie("news_mc.swf",z);
	tmpMCtoUnload = eval("_root.content.subContent" + zCurrent);
	if(z > 1){
	trace(tmpMC);
	trace(tmpMCtoUnload);
		tmpMC.onEnterFrame = function() {
			if(tmpMC._framesloaded == tmpMC._totalframes){
				trace(tmpMCtoUnload + " wurde entfernt!");
				unloadMovie(tmpMCtoUnload);
			}
		}
	}
}

Geändert von mOss (06-12-2005 um 14:49 Uhr)
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 15:06   #11 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Bin ratlos

Ok, habe jetzt geschnallt, dass ich bei der Abfrage nach den Totalframes eh nicht die Anzahl der Frames aus dem geladenen SWF erhalten. Hier ist auf jeden Fall schon ein Fehler. Wie kann ich denn die Anzahl der Frames der zu ladenden SWF herausfinden? Und wieso funktioniert onEnterFrame hier nicht?

Geändert von mOss (06-12-2005 um 15:10 Uhr)
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 15:30   #12 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hab's jezt nicht getestet. Aber du kannst den onEnterFrame schonmal nicht auf den MC legen, der auch nachläd...
PHP-Code:
on (release) {
    
zCurrent _root.ebenenZaehler;
    
= ++_root.ebenenZaehler;
    
_root.content.createEmptyMovieClip("subContent"+zz);
    
tmpMC = eval("_root.content.subContent"+z);
    
tmpMC.loadMovie("news_mc.swf");
    
tmpMCtoUnload = eval("_root.content.subContent"+zCurrent);
    if (
z>1) {
        
trace(tmpMC);
        
trace(tmpMCtoUnload);
        
mc _root.createEmptyMovieClip("watcher",1000)
        
mc.onEnterFrame = function() {
            
this._parent.tmpMC.stop()
            if (
this._parent.tmpMC._framesloaded == this._parent.tmpMC._totalframes) {
                
this._parent.tmpMC.play()
                
trace(tmpMCtoUnload+" wurde entfernt!");
                
removeMovieClip(tmpMCtoUnload);
                
removeMovieClip(this)
            }
        };
    }

edit: Würde vielleicht auch lieber getBytesLoaded() und getBytesTotal() verwenden...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-12-2005, 15:48   #13 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Habe schon bald ein schlechtes Gewissen

Deine Änderung funktioniert, allerdings habe ich wieder das Problem, dass der darunterliegende MC sofort entfernt wird. Jetzt ist mir dabei aufgefallen, dass ich mit _currentframe == _totalframes abfragen müsste, um sicherzustellen, dass der darüberliegende MC wirklich alles bedeckt, damit der darunterliegende gelöscht werden kann.
Dazu habe ich folgende Erweiterung hinzugefügt:

Code:
on (release) { 
    zCurrent = _root.ebenenZaehler; 
    z = ++_root.ebenenZaehler; 
    _root.content.createEmptyMovieClip("subContent"+z, z); 
    tmpMC = eval("_root.content.subContent"+z); 
    tmpMC.loadMovie("profil_mc.swf"); 
    tmpMCtoUnload = eval("_root.content.subContent"+zCurrent); 
    if (z>1) { 
        trace(tmpMC); 
        trace(tmpMCtoUnload); 
        mc = _root.createEmptyMovieClip("watcher",1000) 
        mc.onEnterFrame = function() { 
            this._parent.tmpMC.stop() 
            if (this._parent.tmpMC._framesloaded == this._parent.tmpMC._totalframes) { 
                this._parent.tmpMC.play() 
				if (this._parent.tmpMC._currentframe == this._parent.tmpMC._totalframes) { 
                trace(tmpMCtoUnload+" wurde entfernt!"); 
                removeMovieClip(tmpMCtoUnload); 
                removeMovieClip(this);
				}
            } 
        }; 
    } 
}
Scheint aber nicht zu funktionieren. Das MC wird sofort entfernt

edit:
Das liegt wohl daran, dass er die Anzahl der Frames des dynamisch erzeugten MC ermittelt und nicht die Anzahl der Frames der SWF-Datei, die über loadMovie geladen wird. Beim Trace werden bei totalframes und framesloaded stets 1 angezeigt, obwohl die SWF-Datei etwa 30 Frames hat.

Geändert von mOss (06-12-2005 um 15:53 Uhr)
mOss ist offline   Mit Zitat antworten
Alt 06-12-2005, 16:02   #14 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Ja, der Film hat ja auch nur einen Frame, bis das loadMovie() zündet. Musste noch abfragen. So z.B.:
PHP-Code:
if (this._parent.tmpMC.totalframes == this._parent.tmpMC._framesloaded && this._parent.tmpMC._framesloaded>1
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-12-2005, 16:07   #15 (permalink)
Flash0r
 
Benutzerbild von mOss
 
Registriert seit: Jul 2002
Beiträge: 156
Perfekt

Vielen Dank für Geduld und Mühe! Jetzt lass ich Euch mal in Ruhe
mOss 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 22:48 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele