Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-07-2006, 11:28   #1 (permalink)
Erstmal n Herri!
 
Benutzerbild von _Hannes_
 
Registriert seit: Aug 2002
Ort: Hamburg
Beiträge: 1.233
Flash sürzt bei Rekursion unerklärlicherweise ab. Bug?

Moin Leute,

ich habe folgende Funktion:

PHP-Code:

    this
.preloadPage = function() {
        
trace("PL PAGE");
        
_global.debug++;
        
        if (
this.pageQueue.length <= 0) {
            
trace("ENDE " this.pageQueue.length);
            return 
false;
        }
        
        
        
        
//this.loadingPage = true;
        
        
if (!this.mcl) {
            
this.mcl = new MovieClipLoader();
            
this.mcl._parent this;
            
this.mcl.onLoadComplete = function() {
                
trace("laden von " this._parent.pageQueue[0] + " erfolgreich! Kennzahl: " this._parent.loadCount);
                
this._parent.pageQueue.splice(01);
                
trace(this._parent.pageQueue);
                
this._parent.loadCount++;
                
this._parent.loadingPage false;
                if (
this._parent.pageQueue.length 0this._parent.preloadPage(); // <-- REKURSION
            
}
        }
        
trace("Lade " this.pageQueue[0] + "...");
        
this.pageBuffer.createEmptyMovieClip("page" this.loadCountgetNextHighestDepth());
        
trace(this.mcl.loadClip(this.pageQueue[0], this.pageBuffer["page" this.loadCount]));
    } 
seltsamerweise wird die Entwicklungsumgebung ohne Fehlermeldung beendet, sobald ich die swf teste und oben stehender Rekursionsaufruf drin ist. Eine unendliche Rekursion ist es auf keinen Fall, das Array pageQueue wird tatsächlich 0 Elemente lang. Wenn der Aufruf nicht rekursiv geschieht, sondern ich die Funktion preloadPage bspw. auf einen Button lege und manuell aufrufe funktioniert auch alles.

Doch das wirklich kuriose kommt noch: Wenn ich den Film über "Veröffentlichen" "kompiliere", funktioniert alles, ich kann die dadurch entstehende swf auch im Flashplayer problemlos abspielen.

Probleme bereitet der Debug-Player in der Entwicklungsumgebung, welcher auch abstürzt (und die komplette Entwicklungsumgebung mit sich reißt), wenn ich die auf oben beschriebenem Weg entstandene swf einfach in der Entw.Umg. öffne.

Handelt es sich wirklich um einen Bug, oder blicke ich einfach nicht durch?
__________________
hannesstruss.de
_Hannes_ ist offline   Mit Zitat antworten
Alt 22-07-2006, 11:33   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!

So beim ersten Drübergucken -> Was soll'n das hier:
PHP-Code:
this.mcl._parent this
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 22-07-2006, 11:37   #3 (permalink)
Erstmal n Herri!
 
Benutzerbild von _Hannes_
 
Registriert seit: Aug 2002
Ort: Hamburg
Beiträge: 1.233
der mcl kann irgendwie nicht auf sein Elternobjekt zugreifen ohne die Zeile. Die preloadPage-Funktion ist Methode einer Klasse, hab ich vergessen zu schreiben.

mfg
Hannes
__________________
hannesstruss.de
_Hannes_ ist offline   Mit Zitat antworten
Alt 22-07-2006, 11:42   #4 (permalink)
Erstmal n Herri!
 
Benutzerbild von _Hannes_
 
Registriert seit: Aug 2002
Ort: Hamburg
Beiträge: 1.233
Hier mal die komplette Klasse, vielleicht hilft es ja weiter:

PHP-Code:
_global.debug 0;

function 
PageLoader() {
    
    
this.pageQueue = [];
    
    
this.loadCount 0;
    
    
this.insertPage = function(pagepos) {
        if (
pos == null) {
            
this.pageQueue.push(page);
        } else {
            
this.pageQueue.splice(pos0page);
        }
    };
    
    
this.readPageXML = function(path) {
        
this.pageXML = new XML();
        
this.pageXML.ignoreWhite true;
        
this.pageXML._parent this;
        
this.pageXML.onLoad = function(erfolgreich) {
            if (!
erfolgreich) {
                return 
false;
            }
            for (var 
thisNode this.firstChild.firstChildthisNode != nullthisNode=thisNode.nextSibling) {
                
this._parent.insertPage(thisNode.attributes.src);
            }
            
trace("XML laden erfolgreich: " erfolgreich);
            
trace(this._parent.pageQueue);
            return 
this._parent.startLoading();
        };
        
this.pageXML.load(path);
    };
    
    
this.startLoading = function() {
        
trace("Beginne mit Laden von Seiten...");
        
this.pageBuffer _root.createEmptyMovieClip("pageBuffer"getNextHighestDepth());
        
this.pageBuffer._visible false;
        
this.preloadPage();
    }
    
    
this.preloadPage = function() {
        
trace("PL PAGE");
        
_global.debug++;
        
        if (
this.pageQueue.length <= 0) {
            
trace("ENDE " this.pageQueue.length);
            return 
false;
        }
        
        
        
        
//this.loadingPage = true;
        
        
if (!this.mcl) {
            
this.mcl = new MovieClipLoader();
            
this.mcl._parent this;
            
this.mcl.onLoadComplete = function() {
                
trace("laden von " this._parent.pageQueue[0] + " erfolgreich! Kennzahl: " this._parent.loadCount);
                
this._parent.pageQueue.splice(01);
                
trace(this._parent.pageQueue);
                
this._parent.loadCount++;
                
this._parent.loadingPage false;
                if (
this._parent.pageQueue.length 0this._parent.preloadPage();
            }
        }
        
trace("Lade " this.pageQueue[0] + "...");
        
this.pageBuffer.createEmptyMovieClip("page" this.loadCountgetNextHighestDepth());
        
trace(this.mcl.loadClip(this.pageQueue[0], this.pageBuffer["page" this.loadCount]));
    }
}


_root.pl = new PageLoader();
_root.pl.readPageXML("pages.xml"); 
__________________
hannesstruss.de

Geändert von _Hannes_ (22-07-2006 um 11:44 Uhr)
_Hannes_ ist offline   Mit Zitat antworten
Alt 22-07-2006, 11:43   #5 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Nee, der mcl nicht, aber das LadeObjekt. Hab mal (ohne es testen zu können) ein wenig geändert.
Könnte klappen - oder auch nicht.
Vielleicht hilft's sonst als neuer Denkansatz...
PHP-Code:
this.preloadPage = function() {
    
trace("PL PAGE");
    
_global.debug++;
    if (!
this.mcl) {
        
this.mcl = new MovieClipLoader();
        
this.mcl.onLoadInit = function(obj) {
            
trace("laden von "+this.obj+" erfolgreich! Kennzahl: "+obj._parent.loadCount);
            
obj._parent.pageQueue.splice(01);
            
obj._parent.loadCount++;
            if (
obj._parent.pageQueue.length>0) {
                
trace("Lade "+obj._parent.pageQueue[0]+"...");
                
obj._parent.pageBuffer.createEmptyMovieClip("page"+obj._parent.loadCountobj._parent.pageBuffer.getNextHighestDepth());
                
this.loadClip(obj._parent.pageQueue[0], obj._parent.pageBuffer["page"+obj._parent.loadCount]);
            } else {
                
trace("ENDE "+obj._parent.pageQueue.length);
                return 
false;
            }
        };
    }
}; 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++

Geändert von Der Frager (22-07-2006 um 11:44 Uhr)
Der Frager ist offline   Mit Zitat antworten
Alt 22-07-2006, 12:04   #6 (permalink)
Erstmal n Herri!
 
Benutzerbild von _Hannes_
 
Registriert seit: Aug 2002
Ort: Hamburg
Beiträge: 1.233
Hi,

vielen Dank für deine Mühen, hat leider so nicht ganz funktioniert. Ich habe es jetzt wieder auf "meine" Variante zurückgeschrieben, aber deine Verschachtelung beibehalten und das Laden des ersten Clips "deautomatisiert". Jetzt funktioniert es perfekt!

Vielen Dank!

Hier noch der Code:

PHP-Code:
this.preloadPage = function() {
        
trace("PL PAGE");
        
_global.debug++;
        if (!
this.mcl) {
            
this.mcl = new MovieClipLoader();
            
this.mcl._parent this;
            
this.mcl.onLoadComplete = function(obj) {
                
trace("laden von "+this._parent.pageQueue[0]+" erfolgreich! Kennzahl: "+this._parent.loadCount);
                
this._parent.pageQueue.splice(01);
                
this._parent.loadCount++;
                if (
this._parent.pageQueue.length>0) {
                    
trace("Lade "+this._parent.pageQueue[0]+"...");
                    
this._parent.pageBuffer.createEmptyMovieClip("page"+this._parent.loadCountthis._parent.pageBuffer.getNextHighestDepth());
                    
this.loadClip(this._parent.pageQueue[0], this._parent.pageBuffer["page"+this._parent.loadCount]);
                } else {
                    
trace("ENDE "+this._parent.pageQueue.length);
                    return 
false;
                }
            };
        }
        
this.pageBuffer.createEmptyMovieClip("page0"getNextHighestDepth());
        
this.mcl.loadClip(this.pageQueue[0], this.pageBuffer.page0);
    }; 


endlich kann ich wieder ruhig schlafen, damit habe ich mich die halbe Nacht herumgeschlagen
__________________
hannesstruss.de
_Hannes_ ist offline   Mit Zitat antworten
Alt 22-07-2006, 15:08   #7 (permalink)
Erstmal n Herri!
 
Benutzerbild von _Hannes_
 
Registriert seit: Aug 2002
Ort: Hamburg
Beiträge: 1.233
so, ich glaube ich habe inzwischen den Fehler gefunden - nachdem ich wieder nahe vor dem Verzweifeln war und schon Tränen in den Augen hatte . Ich habe getNextHighestDepth falsch verwendet. Ich dachte das spuckt mir global immer die nächsthöhere Zahl aus, und so habe ich es nie als Methode des Container-MovieClips verwendet, sondern alleinstehend. Meistens hat das geklappt, in diesem Fall aber nicht, und hat mir glatt die Entwicklungsumgebung abgeschossen.
__________________
hannesstruss.de

Geändert von _Hannes_ (22-07-2006 um 15:14 Uhr)
_Hannes_ 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 12:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele