Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-06-2005, 10:35   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
setinterval() stresst

Lese mit AS ne XML aus in der Events stehen die dann in das Datagrid "up" bzw "down" gelegt werden. Oben stehen die schon laufenden events unten die kommenden.

Das ganze muss also per setInterval() jede Sekunde passiern damit a. die Uhr mitläuft und b.änderungen im Programm(der XML-File) direkt dargestellt werden.

Wenn ich die Funktion von Hand "einmal" aufrufe klappt alles wunderbar.
Wenn ich per MC-Schleife die Funktion immer wieder (alle 30fps) aufrufen lasse klappt auch alles

Wenn ich das ganze per setInterval() mache passiert gar nichts!!

Hier mein code:
ActionScript:
  1. //-------------------------------
  2. _global.totalXMLFiles = 0;
  3. _global.totalMedia = 0;
  4. _global.totalAssets = 0;
  5. // for using öäü
  6. System.useCodepage = true;
  7. //
  8. function loadMedia(_oAttributesArray, _data) {
  9.     //This function adds a swf or jpg to the stage
  10.     _root.attachMovie("loader", "oLoader"+(++_global.totalMedia), ++_global.totalAssets);
  11.     _root["oLoader"+_global.totalMedia]._x = _oAttributesArray["X"];
  12.     _root["oLoader"+_global.totalMedia]._y = _oAttributesArray["Y"];
  13.     _root["oLoader"+_global.totalMedia].scaleContent = false;
  14.     _root["oLoader"+_global.totalMedia].contentPath = _data;
  15.     _root["oLoader"+_global.totalMedia].load();
  16. }
  17. function CreateGrid(_oAttributesArray) {
  18.     //This function adds and information grid to the stage 
  19.     //the the current row to "0"
  20.     _global.UpiRow = 0;
  21.     _global.DowniRow = 0;
  22.     //attach the Grid to the stage
  23.     _root.attachMovie("DataGrid", "oGridUp", ++_global.totalAssets);
  24.     //set the size of the grid
  25.     _root["oGridUp"].setSize(Number(_oAttributesArray["Width"]), Number(_oAttributesArray["Height"]));
  26.     //set the x position of the grid
  27.     _root["oGridUp"]._x = _oAttributesArray["X"];
  28.     //set the y position of the grid
  29.     _root["oGridUp"]._y = _oAttributesArray["Y"];
  30.     //set spaceColumnsEqually
  31.     if (_oAttributesArray["spaceColEvenly"] eq "true") {
  32.         _root["oGridUp"].spaceColumnsEqually();
  33.     }
  34.     /*Assign Design
  35.     _root["oGridUp"].setStyle("vGridLineColor", "0x"+_oAttributesArray["borderColor"]);
  36.     _root["oGridUp"].setStyle("hGridLineColor", "0x"+_oAttributesArray["borderColor"]);
  37.     _root["oGridUp"].setStyle("headerColor", "0x"+_oAttributesArray["headerColor"]);
  38.     _root["oGridUp"].headerHeight = 30;
  39.     _root["oGridUp"].rowHeight = 20;
  40.     _root["oGridUp"].borderColor = "0x"+_oAttributesArray["borderColor"];
  41.     _root["oGridUp"].backgroundColor = "0x"+_oAttributesArray["backgroundColor"];
  42.     */
  43.     //
  44.     // create 2nd grid
  45.     //
  46.     //attach the Grid to the stage
  47.     _root.attachMovie("DataGrid", "oGridDown", ++_global.totalAssets);
  48.     //set the size of the grid
  49.     _root["oGridDown"].setSize(Number(_oAttributesArray["Width"]), Number(_oAttributesArray["Height"]));
  50.     //set the x position of the grid
  51.     _root["oGridDown"]._x = _oAttributesArray["X"];
  52.     //set the y position of the grid
  53.     _root["oGridDown"]._y = Number(_oAttributesArray["Y"])+Number(_oAttributesArray["Height"])+Number(_oAttributesArray["Space"]);
  54.     //set spaceColumnsEqually
  55.     if (_oAttributesArray["spaceColEvenly"] eq "true") {
  56.         _root["oGridDown"].spaceColumnsEqually();
  57.     }
  58.     /*Assign Design
  59.     _root["oGridDown"].setStyle("vGridLineColor", "0x"+_oAttributesArray["borderColor"]);
  60.     _root["oGridDown"].setStyle("hGridLineColor", "0x"+_oAttributesArray["borderColor"]);
  61.     _root["oGridDown"].setStyle("headerColor", "0x"+_oAttributesArray["headerColor"]);
  62.     _root["oGridDown"].headerHeight = 30;
  63.     _root["oGridDown"].rowHeight = 20;
  64.     _root["oGridDown"].borderColor = "0x"+_oAttributesArray["borderColor"];
  65.     _root["oGridDown"].backgroundColor = "0x"+_oAttributesArray["backgroundColor"];
  66.     */
  67. }
  68. function CheckDate(datadate) {
  69.     var datadate = String(datadate);
  70.     date_tmparr = datadate.split("-");
  71.     day_arr = date_tmparr[0].split(".");
  72.     time_arr = date_tmparr[1].split(":");
  73.     //saved date
  74.     var datadatum = new Date(day_arr[2], day_arr[1]-1, day_arr[0], time_arr[0], time_arr[1]);
  75.     //var datadatum = new Date(205, 8, 21, 12, 5);
  76.     //kommt noch
  77.     if (datadatum>new Date()) {
  78.         return false;
  79.         //läuft schon
  80.     } else {
  81.         return true;
  82.     }
  83. }
  84. function AddRow(bool) {
  85.     //create an array for the current row
  86.     if (bool) {
  87.         //true = up
  88.         _global["UparrRow"+(++_global.UpiRow)] = new Array();
  89.     } else {
  90.         _global["DownarrRow"+(++_global.DowniRow)] = new Array();
  91.     }
  92. }
  93. function AddColumn(bool, _oAttributesArray, _data) {
  94.     //push another clown in to the current row array
  95.     if (bool) {
  96.         //true = up
  97.         _global["UparrRow"+_global.UpiRow][_oAttributesArray["Name"]] = _data;
  98.         _global["UparrRow"+_global.UpiRow].reverse();
  99.     } else {
  100.         _global["DownarrRow"+_global.DowniRow][_oAttributesArray["Name"]] = _data;
  101.         _global["DownarrRow"+_global.DowniRow].reverse();
  102.     }
  103. }
  104. function Parse(_firstchild) {
  105.     //Recursive function that parses XML
  106.     //if xml is not empty
  107.     if (_firstchild != null) {
  108.         var sNode = _firstchild.nodeName;
  109.         var oAttributesArray = _firstchild.attributes;
  110.         switch (sNode) {
  111.         case ("display") :
  112.             break;
  113.         case ("media") :
  114.             this.loadMedia(oAttributesArray, _firstchild.firstChild);
  115.             break;
  116.             //creat grid
  117.         case ("grid") :
  118.             _global.totalRows = 0;
  119.             this.CreateGrid(oAttributesArray);
  120.             break;
  121.             //add row
  122.         case ("row") :
  123.             date_str = _firstchild.firstChild.firstChild;
  124.             if (CheckDate(date_str)) {
  125.                 _global.Grid = true;
  126.                 this.AddRow(true);
  127.             } else {
  128.                 this.AddRow(false);
  129.                 _global.Grid = false;
  130.             }
  131.             break;
  132.             //add column
  133.         case ("column") :
  134.             date_str = _firstchild.firstChild.firstChild;
  135.             this.AddColumn(_global.Grid, oAttributesArray, _firstchild.firstChild, _firstchild.nextSibling);
  136.             break;
  137.         default :
  138.             //unexpected tag encountered
  139.             error = true;
  140.             break;
  141.         }
  142.         var oNextChildXml = _firstchild.firstChild;
  143.         //rekursiv child usage
  144.         while (oNextChildXml != null) {
  145.             this.Parse(oNextChildXml);
  146.             oNextChildXml = oNextChildXml.nextSibling;
  147.         }
  148.     }
  149. }
  150. function loadXMLData() {
  151.     //This function creates and XML object and loads a file into it
  152.     this["oDataXml"] = new XML();
  153.     this["oDataXml"].ignoreWhite = true;
  154.     this["oDataXml"].onLoad = function(_bSuccess) {
  155.         //if the xml file is loaded sucessfully
  156.         if (_bSuccess) {
  157.             Parse(this.firstChild);
  158.             //populate final grid
  159.             //create the oData Array
  160.             UpoData = new Array();
  161.             DownoData = new Array();
  162.             //fill the oData Array
  163.             for (var x = 1; x<=_global.UpiRow; x++) {
  164.                 UpoData[x-1] = _global["UparrRow"+(x)];
  165.             }
  166.             for (var x = 1; x<=_global.DowniRow; x++) {
  167.                 DownoData[x-1] = _global["DownarrRow"+(x)];
  168.             }
  169.             //assign the dataProvider
  170.             _root["oGridUp"].dataProvider = UpoData;
  171.             _root["oGridDown"].dataProvider = DownoData;
  172.             //clear the tmp oData array
  173.             oData = null;
  174.             //else the xml file coul not be loaded
  175.         } else {
  176.             error = true;
  177.         }
  178.     };
  179.     this["oDataXml"].sendAndLoad("data.xml", this["oDataXml"]);
  180.     //und noch zeit ausgebem
  181.     createDate();
  182. }
  183. function createDate() {
  184.     datum = new Date();
  185.     datum.getMonth()+1<10 ? akt_datum[0]="0"+(datum.getMonth()+1) : akt_datum[0]=datum.getMonth()+1;
  186.     datum.getDate()<10 ? akt_datum[1]="0"+datum.getDate() : akt_datum[1]=datum.getDate();
  187.     datum.getHours()<10 ? akt_datum[2]="0"+datum.getHours() : akt_datum[2]=datum.getHours();
  188.     datum.getMinutes()<10 ? akt_datum[3]="0"+datum.getMinutes() : akt_datum[3]=datum.getMinutes();
  189.     datum.getSeconds()<10 ? akt_datum[4]="0"+datum.getSeconds() : akt_datum[4]=datum.getSeconds();
  190.     _root.datumday = wochentage[datum.getDay()]+", den "+akt_datum[1]+"."+akt_datum[0]+"."+datum.getFullYear();
  191.     _root.datumtime = akt_datum[2]+" : "+akt_datum[3]+" : "+akt_datum[4];
  192. }
  193. //
  194. //loadXMLData();
  195. setInterval(loadXMLData, 1000);
mukraker ist offline   Mit Zitat antworten
Alt 04-06-2005, 07:39   #2 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
hi,

was passiert, wenn Du die Funktion im setInterval() aufrufst:

ActionScript:
  1. setInterval(
  2. function loadXMLData() {
  3.         //This function creates and XML object and loads a file into it
  4.         this["oDataXml"] = new XML();
  5.         this["oDataXml"].ignoreWhite = true;
  6.         this["oDataXml"].onLoad = function(_bSuccess) {
  7.                 //if the xml file is loaded sucessfully
  8.                 if (_bSuccess) {
  9.                         Parse(this.firstChild);
  10.                         //populate final grid
  11.                         //create the oData Array
  12.                         UpoData = new Array();
  13.                         DownoData = new Array();
  14.                         //fill the oData Array
  15.                         for (var x = 1; x<=_global.UpiRow; x++) {
  16.                                 UpoData[x-1] = _global["UparrRow"+(x)];
  17.                         }
  18.                         for (var x = 1; x<=_global.DowniRow; x++) {
  19.                                 DownoData[x-1] = _global["DownarrRow"+(x)];
  20.                         }
  21.                         //assign the dataProvider
  22.                         _root["oGridUp"].dataProvider = UpoData;
  23.                         _root["oGridDown"].dataProvider = DownoData;
  24.                         //clear the tmp oData array
  25.                         oData = null;
  26.                         //else the xml file coul not be loaded
  27.                 } else {
  28.                         error = true;
  29.                 }
  30.         };
  31.         this["oDataXml"].sendAndLoad("data.xml", this["oDataXml"]);
  32.         //und noch zeit ausgebem
  33.         createDate();
  34. },1000
  35. );

bzw die Funktion im interval so aufrufst:

ActionScript:
  1. setInterval(loadXMLData(),1000);

?

gruss
Tom
Tom(2) ist offline   Mit Zitat antworten
Alt 04-06-2005, 08:35   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
zu eins:
ActionScript:
  1. setInterval( loadXML() ...(  //eingebettet
  2.  
Hier passier wie vorher nchts!

zu zwei:
ActionScript:
  1. setInterval( loadXML() ...( //mit()
  2.  
Hier wird die Funktion nur ein Mal aufgerufen


leider war es das also noch nicht :-(
mukraker ist offline   Mit Zitat antworten
Alt 04-06-2005, 08:49   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
oh sorry... es war noch vor dem ersten kaffee...
das mit setInteval(funktionsname(),1000); kann nicht funktionieren.

Dein ursprünglicher setInterval Aufruf ist korrekt.
hm... der interval ruft die funktion loadxml jede sekunde auf.
in der funktion wird nochmal mit onload und success gekuckt... vielleicht steckt da der fehler...? ich bin nicht fit mit der xml laderei, nur so ein denkansatz - vielleicht wird die funktion ja richtig aufgerufen, der interval ist aber zu knapp, damit der onloadsucess jemals true wird..?
mach doch mal testweise ein else mit trace("nix passiert") in die funktion, wenn meine theorie stimmt, müsste jede sekunde "nix passiert" ausgegeben werden.
gruss
Tom
Tom(2) ist offline   Mit Zitat antworten
Alt 04-06-2005, 09:27   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
die funktion loadXML() ha jetzt direkt in der zweiten zeile ein
ActionScript:
  1. trace("ruf mich auf")
das wird jede Sek. ausgegeben.

Wenn ich allerding nach der Zeile
ActionScript:
  1. this["oDataXml"].onLoad = function(_bSuccess) {
ein Trace setze, wird das nicht ausgegeben, sondern nur das von oben.
mukraker ist offline   Mit Zitat antworten
Alt 09-07-2005, 09:16   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
boahh fuck zu montag muss das laufen und ich hab immer noch keine lösung :-(

helft mir!!
mukraker ist offline   Mit Zitat antworten
Alt 09-07-2005, 09:30   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
hi,
ich glaube immernoch, dass der interval zu knapp ist, damit die xml-load erfolgreich ist - deshlab wird nix ausgeführt, was innerhalb der "hats geklappt" abfrage steht. setze doch mal den interval auf 5000 oder 10000, um zu sehen, ob das problem dann weg ist.
Falls ja, müsstest Du die Logik etwas umbauen.. also die Uhr aktualisiert sich jede Sekunde, aber die info zu den xml daten wird eben grosszügiger gecheckt, vielleicht nur alle 15 oder 30 sekunden. ggf brauchst du also zwei setIntervals...

gruss
Tom

Geändert von Tom(2) (09-07-2005 um 09:48 Uhr)
Tom(2) ist offline   Mit Zitat antworten
Alt 09-07-2005, 09:47   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
selbst bei 1 Minute wird die nicht geladen!

die file+xml mal als DL unter:
http://data.insnet.de/zwei.zip

Geändert von mukraker (09-07-2005 um 09:51 Uhr)
mukraker ist offline   Mit Zitat antworten
Alt 09-07-2005, 09:52   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
mach mal nen trace hier
ActionScript:
  1. } else {
  2. error = true;
  3. trace("klappt nicht");
  4. }
Tom(2) ist offline   Mit Zitat antworten
Alt 09-07-2005, 10:00   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
ActionScript:
  1. function loadXMLData() {
  2.     //This function creates and XML object and loads a file into it
  3.     this["oDataXml"] = new XML();
  4.     trace("luup");

hier das"luup" wird im Interval ausgegeben


in der else das vor dir vorschlagende trace wird nicht ausgegeben
mukraker ist offline   Mit Zitat antworten
Alt 09-07-2005, 10:10   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
ich habe mir den code mal geladen und angeschaut.
sehr strange.

mach mal folgendes; ruf die loadXML(); am ende manuell auf, und packe den setInterval in die funktion rein, was passiert denn dann? ich kann nicht checken, ob es funktioniert, weil der xml sich ja nicht verändert.
ActionScript:
  1. function loadXMLData() {
  2.     //This function creates and XML object and loads a file into it
  3.     this["oDataXml"] = new XML();
  4.     trace("luup");
  5.  
  6.     this["oDataXml"].ignoreWhite = true;
  7.     this["oDataXml"].onLoad = function(_bSuccess) {
  8.         //if the xml file is loaded sucessfully
  9.         if (_bSuccess) {
  10.             Parse(this.firstChild);
  11.             //populate final grid
  12.             //create the oData Array
  13.             UpoData = new Array();
  14.             DownoData = new Array();
  15.             //fill the oData Array
  16.             for (var x = 1; x<=_global.UpiRow; x++) {
  17.                 UpoData[x-1] = _global["UparrRow"+(x)];
  18.             }
  19.             for (var x = 1; x<=_global.DowniRow; x++) {
  20.                 DownoData[x-1] = _global["DownarrRow"+(x)];
  21.             }
  22.             //assign the dataProvider
  23.             _root["oGridUp"].dataProvider = UpoData;
  24.             _root["oGridDown"].dataProvider = DownoData;
  25.             //clear the tmp oData array
  26.             oData = null;
  27.             checkInt = setInterval(loadXMLData,5000);
  28.             //else the xml file coul not be loaded
  29.         } else {
  30.             error = true;
  31.             trace("GEHT NICHT");
  32.         }
  33.     };
  34.     //wasn das?
  35.     this["oDataXml"].sendAndLoad("data.xml", this["oDataXml"]);
  36.     //this["oDataXml"].load("data.xml");
  37.     //und noch zeit ausgebem
  38.     createDate();
  39. }
  40. function createDate() {
  41.     datum = new Date();
  42.     datum.getMonth()+1<10 ? akt_datum[0]="0"+(datum.getMonth()+1) : akt_datum[0]=datum.getMonth()+1;
  43.     datum.getDate()<10 ? akt_datum[1]="0"+datum.getDate() : akt_datum[1]=datum.getDate();
  44.     datum.getHours()<10 ? akt_datum[2]="0"+datum.getHours() : akt_datum[2]=datum.getHours();
  45.     datum.getMinutes()<10 ? akt_datum[3]="0"+datum.getMinutes() : akt_datum[3]=datum.getMinutes();
  46.     datum.getSeconds()<10 ? akt_datum[4]="0"+datum.getSeconds() : akt_datum[4]=datum.getSeconds();
  47.     _root.datumday = wochentage[datum.getDay()]+", den "+akt_datum[1]+"."+akt_datum[0]+"."+datum.getFullYear();
  48.     _root.datumtime = akt_datum[2]+" : "+akt_datum[3]+" : "+akt_datum[4];
  49. }
  50.  
  51. loadXMLData();
Tom(2) ist offline   Mit Zitat antworten
Alt 09-07-2005, 10:12   #12 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
Zitat:
weil der xml sich ja nicht verändert.
doch, gerade das könnte der fall sein! Möchte auf der Veranstaltung änderungen ohne neustart der swf durchführen. Also nur durch ändern der xml

und ich muss ja jede sek. cheken ob eine veranstaltung noch kommt oder schon läuft

Geändert von mukraker (09-07-2005 um 10:15 Uhr)
mukraker ist offline   Mit Zitat antworten
Alt 09-07-2005, 10:19   #13 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
ja, schon klar. aber der momentane xml-file ist ja statisch und ändert sich nicht, von daher kann ich schlecht erkennen, ob sich die daten aktualisieren.
ausserdem ist irgendwas in der createDate(); faul, bei mir kommt ausser dem Jahr nur "undefined" an.
Tom(2) ist offline   Mit Zitat antworten
Alt 09-07-2005, 10:29   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
um zu erkennen ob sich was ändert will ich ja die xml jede sekunde auslesen
mukraker ist offline   Mit Zitat antworten
Alt 09-07-2005, 10:43   #15 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Frankfurt am Main
Beiträge: 94
:-)
wenn sich der (inhalt des) xml file aber nicht sekündlich ändert, siehst Du nicht, ob es prinzipiell funktioniert.
Tom(2) 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 06:44 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele