Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-10-2003, 10:10   #1 (permalink)
Neuer User
 
Benutzerbild von armadillo
 
Registriert seit: Oct 2003
Ort: Luzern
Beiträge: 33
"A script in this movie is causing Flash Player to run slowly"

Ich verwende ein externes XML File (16 kB gross), um Daten in einen Flash Film zu laden.

Die ersten 6 Frames sind Preloader. Danach wird das XML mit der Aktion Name.load geladen.

In den darauf folgenden Frames wird
- das XML in Arrays gemappt
- verschiedene kurze Funktionen ausgeführt

Das Ganze läuft in der Entwicklungsumgebung stabil (Mac OSX / Flash MX publiziert als Flash 5), nicht aber im Web. Dort kommt beim Laden des SWF manchmal eine erratische Fehlermeldung "Macromedia Flash Player 6 wird durch ein Skript in diesem Film verlangsamt" bzw. "A script in this movie is causing Flash Player to run slowly".

Man kann dann entscheiden, ob man das Skript abbrechen oder laufen lassen soll. Lässt man es laufen, blitzt der Film nur noch und zeigt nicht mehr das Gewünschte.

Der Fehler tritt auf:
- immer mit Mac OS 9.1 / IE 5 oder Netscape 4.76, der via Modem am Netz hängt
- manchmal mit Mac OSX / IE 5.2 oder Safari der via ADSL am Netz hängt

Der Player ist jeweils mindestens Version 6.

Hat irgend jemand eine Ahnung, was hier vorgeht???

URL zum Demonstrieren: http://www.armadillo-media.ch/test_m...eration_d.html

Komischerweise lädt alles korrekt, wenn man dann einen Reload macht.
armadillo ist offline   Mit Zitat antworten
Alt 22-10-2003, 11:06   #2 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
also zu der Fehlermeldung kommt es, wenn flash zur Abarbeitung einer scriptzeile mehr als 30 (Flash5-Player) bzw mehr als 25 (Flash6-Player) Sekunden braucht, dann vermutet Flash eine Endlosschleife und gibt dem user die Möglichkeit zum Abbruch.
eigentlich sollte das aber mit XML.load und dem onLoad-Handler nicht mehr passieren, höchstens beim parsen der XML-Daten, wie sieht denn in dem Bereich Dein script aus??

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (22-10-2003 um 11:08 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 22-10-2003, 11:25   #3 (permalink)
Neuer User
 
Benutzerbild von armadillo
 
Registriert seit: Oct 2003
Ort: Luzern
Beiträge: 33
Hallo Alois,

das Skript, das mein eingelesenes XML in Arrays überträgt sieht so aus (die Funktion wird durch extract(); in Bild 7 des Hauptfilms aufgerufen, XMLObjekt.load ist in Bild 6):

//Diese Funktion uebertraegt das eingelesene XML File in Arrays
//Augerufen durch Bild 15 im Hauptfilm
function extract(){
//Anfangsknoten der Ebene <movie> ermitteln
xmlTemp1 = xmlInfos.firstChild.firstChild;
//Attribut id der Ebene <movie> ermitteln
tempNN1 = xmlTemp1.attributes.id;
//Eine Ebene tiefer gehen
xmlTemp2 = xmlTemp1.firstChild;
//Schleife mit Abbruch, wenn tempNN1 = "eof"
for(i=1; tempNN1 != "eof"; i++){
//Nur die Daten des richtigen Films im Array ablegen
if(tempNN1 == _root.movie_ID){
//Mehrdimensionale Arrays eroeffnen
//Die erste Dimension wird in Bild 1 des Hauptfilms eroeffnet
aufgabe[_root.theMovie] = new Array();
main_text[_root.theMovie] = new Array();
info_text[_root.theMovie] = new Array();
fdbk_item[_root.theMovie] = new Array();
//Aufgaben einlesen, falls vorhanden
if(xmlTemp2.nodeName == "aufgabe"){
for(j=1; xmlTemp2.nodeName == "aufgabe"; j++){
aufgabe[_root.theMovie][j] = unescape(xmlTemp2.attributes.text);
//Sprung zum naechsten Knoten (main_text oder daten)
xmlTemp2 = xmlTemp2.nextSibling;
}
}
//Haupttext einlesen, falls vorhanden
if(xmlTemp2.nodeName == "main_text"){
for(k=1; xmlTemp2.nodeName == "main_text"; k++){
main_text[_root.theMovie][k] = unescape(xmlTemp2.attributes.text);
//Sprung zum naechsten Knoten (main_text oder daten)
xmlTemp2 = xmlTemp2.nextSibling;
}
}
//Daten einlesen, falls vorhanden
//im hier vorliegenden Beispiel gibt es kein <daten> tag
if(xmlTemp2.nodeName == "daten"){
k=1;
while(xmlTemp2.nodeName == "daten"){
//Beim ersten Knoten, der <daten> heisst...
daten[k] = unescape(xmlTemp2.attributes.horizont);
daten[k] = new Array();
daten[k][1] = unescape(xmlTemp2.attributes.achse);
daten[k][1] = new Array();
daten[k][2] = unescape(xmlTemp2.attributes.achse);
daten[k][2] = new Array();
temp_horiz = xmlTemp2.attributes.horizont;
m=1;
while(xmlTemp2.attributes.horizont == temp_horiz){
//Nun werden alle <daten> Attribute durchgegangen
//zuerst die mit dem Attribut s...
temp_var = "s" + m;
n=1;
while(xmlTemp2.attributes[temp_var] != null){
daten[k][2][n] = xmlTemp2.attributes[temp_var];
n++;
temp_var = "s" + n;
}
//Sprung zum naechsten Datensatz (x-Achse)
xmlTemp2 = xmlTemp2.nextSibling;
//dann die mit dem Attribut theta...
temp_var = "theta" + m;
n=1;
while(xmlTemp2.attributes[temp_var] != null){
temp_var = "theta" + n;
daten[k][1][n] = xmlTemp2.attributes[temp_var];
n++;
temp_var = "theta" + n;
}

//Sprung zum naechsten Datensatz
xmlTemp2 = xmlTemp2.nextSibling;
m++;
}
k++;
//Abbruch, wenn der Knoten nicht mehr <daten> heisst
}
}
//Infotext einlesen, falls vorhanden
if(xmlTemp2.nodeName == "info_text"){
for(k=1; xmlTemp2.nodeName == "info_text"; k++){
info_text[_root.theMovie][k] = unescape(xmlTemp2.attributes.text);
//Sprung zum naechsten Knoten
xmlTemp2 = xmlTemp2.nextSibling;
}
}
//Feedbacktext einlesen, falls vorhanden
if(xmlTemp2.nodeName == "fdbk_item"){
for(k=1; xmlTemp2.nodeName == "fdbk_item"; k++){
fdbk_item[_root.theMovie][k] = unescape(xmlTemp2.attributes.text);
//Sprung zum naechsten Knoten
xmlTemp2 = xmlTemp2.nextSibling;
}
}
}
//Nach dem Einlesen des gesamten <movie> Knotens zum naechsten <movie> springen
xmlTemp1 = xmlTemp1.nextSibling;
//tempNN1 aktualisieren
tempNN1 = xmlTemp1.attributes.id;
//xmlTemp2 aktualisieren
xmlTemp2 = xmlTemp1.firstChild;
}
}

Erklärung: Für den Fall, dass tempNN1 == _root.movie_ID (die movie_ID wird beim Laden mit übergeben), geht das Skript durch alle Knoten des jeweiligen <movie> Tags durch und legt den Inhalt in zwei bzw. dreidimensionalen Arrays ab.

Kannst Du damit etwas anfangen?

Gruss

Andreas
armadillo ist offline   Mit Zitat antworten
Alt 22-10-2003, 13:01   #4 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
hmm..., hier ist wahrscheinlich schon der Fehler:
Zitat:
...die Funktion wird durch extract(); in Bild 7 des Hauptfilms aufgerufen, XMLObjekt.load ist in Bild 6):
...aber die File wird mit grösster Sicherheit in Bild7 noch nicht geladen sein, der extact-Befehl wird also hier:
ActionScript:
  1. for(i=1; tempNN1 != "eof"; i++){...
ins Unendliche abgleiten, weil kein tempNN=="eof" kommen wird.
....aber genau das kann man hervorragend im XML-Objekt abfangen, dafür setzt Du in frame 6 ein stop() und fügst folgendes script zu:
ActionScript:
  1. XMLObject.onLoad=function(succsess){
  2. if(succsess){
  3. extract();
  4. play();
  5. }else{
  6. //hier eine Aktion falls das Laden der XML-Datei fehlschlägt
  7. }
  8. }
...das extract in frame7 kann dann entfallen.

Gruß

Alois

Edit: ...der scriptteil sollte vor XMLObject.load und hinter XMLObject = new XML stehen um in jedem Fall zu funktionieren
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (22-10-2003 um 13:07 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 22-10-2003, 13:37   #5 (permalink)
Neuer User
 
Benutzerbild von armadillo
 
Registriert seit: Oct 2003
Ort: Luzern
Beiträge: 33
Alois, herzlichen Dank. Das scheint zu klappen. Ich muss es nun nur noch via Modem testen. Eigentlich ist die Lösung ja total simpel, aber manchmal hockt man einfach auf dem Kabel...
Gruss aus Luzern
Andreas
armadillo 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 05:22 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele