Interval Zeit Durchscnitt [Flash 10]
| Beiträge: 8 Registriert: Nov 2009
| 20.11.2009, 11:00
Ich habe eine vairiable die sich ständig ändert.
Ist es möglich jede sekunde diese variable abzufragen und den durschnit zu errechnen? | | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 20.11.2009, 11:04
Hallo,
sollte funktionieren. Intervall ist da schon der richtige Begriff. Du könntest mit setInterval() jede Sekunde eine Funktion aufrufen, die ihrerseits die Variable ausliest, speichert und dann den arithmetischen Mittelwert bildet (also Summe der Werte durch Anzahl der Werte).
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | Geändert von Sleepingbeast am 20.11.09 um 11:54 Uhr | |
| | Beiträge: 8 Registriert: Nov 2009
Themenautor/in
| 20.11.2009, 11:14
Find ich eine klasse antwort jedoch hilft es mir nicht sehr viel :)
die varianble die sich ändert heist var zahl | | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 20.11.2009, 11:21
Hier mal ein kleines Script:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var zahl:Number; //das ist die Zahl, die sich ständig ändert
var zahlen:Array = new Array(); //das ist das Array, in welchem die Zahlen gespeichert werden
stage.addEventListener(Event.ENTER_FRAME, aendereZahl);
function aendereZahl(e:Event):void {
zahlen.push(zufall(1,5)); //schreibe die sich ändernde Zahl bei jedem ENTER_FRAME-Event ins Array
}
function zufall(A:Number, B:Number):Number {
var zufallszahl:Number = A + Math.floor(Math.random() * (B - A + 1));
return zufallszahl;
}
function durchschnitt():void {
var summe:Number = 0;
var durchschnittswert:Number;
for(var i:int = 0; i < zahlen.length; i++) { //Summiere alle Zahlen im Array
summe += zahlen[i];
}
durchschnittswert = summe / zahlen.length; //Berechne den Durchschnitt
trace("Durchschnitt: " + durchschnittswert);
}
setInterval(durchschnitt, 1000); //ruft die Funktion zum Berechnen des Durchschnitts alle 1000ms auf
|
Das einzige Problem, was hier auftreten könnte, ist dass das Array zahlen ja immer "voller" wird, weil ja dort ständig (je nach FrameRate) neue Zahlen zugefügt werden. Aber vielleicht hilfts die schonmal weiter.
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | | | Beiträge: 8 Registriert: Nov 2009
Themenautor/in
| 20.11.2009, 13:37
danke das klapt perfekt :)
Nur eben 1 problem mit dem array :)
Kann man den irgendwie löschen wenn er 200 einträge oder so hat? | | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 20.11.2009, 13:47
Freut mich zu hören ;)
Löschen könntest du die Elemente des Arrays z.B. mit:
ActionScript:1 2 3 | if(zahlen.length >= 200) {
zahlen = [];
}
|
innerhalb der Funktion durchschnitt(). Allerdings ist ein Wert von 200 Einträgen im Array sehr schnell erreicht. Bei einer Rate von 25 Frames je Sekunde ergeben sich die 200 Einträge schon nach 200/25 = 8 Sekunden. Wenn dir diese Zeit reicht, kannst du schon die 200 lassen. Ich hab das Script aber vorhin mal etwa eine Stunde laufen lassen und hab weder eine Fehlermeldung bekommen noch irgendwelche Performanceeinbußen bemerkt. Und bei einer Stunde Laufzeit mit 25fps ergeben sich ja schon 25 * 60 * 60 = 90000 Einträge im Array.
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | Geändert von Sleepingbeast am 20.11.09 um 13:48 Uhr | |
| | Beiträge: 8 Registriert: Nov 2009
Themenautor/in
| 20.11.2009, 13:57
boa geile sache :)
Nur noch eine sache (hoffe ich)
function aendereZahl
die fürst du ja dauerd aus also im nächsten frame, kann man auch machen das er es nur alle 500milisekunden macht? | | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 20.11.2009, 15:39
klar doch...geht alles ;)
dafür musst du nur das:
ActionScript:1 | stage.addEventListener(Event.ENTER_FRAME, aendereZahl); //<<-- Diese Zeile komplett löschen!!!
|
komplett entfernen (oder mit // auskommentieren).
Dann die übergebenen Parameter, also das e:Event der Funktion aendereZahl() löschen, damit dort eben nur noch:
ActionScript:1 2 3 | function aendereZahl():void {
zahlen.push(zufall(1,5)); //schreibe die sich ändernde Zahl bei jedem ENTER_FRAME-Event ins Array
}
|
steht.
Zu guter Letzt noch ein neues Intervall erzeugen, was die Funktion aendereZahl() eben alle 500ms aufruft.
ActionScript:1 | setInterval(aendereZahl, 500);
|
Die Funktion ändereZahl hatte ich aber eigentlich nur eingebaut, um mir eine Variable zu erzeugen, die sich regelmäßig ändert. Also eben um die von dir zu Beginn erwähnte Variable zu simulieren. Aber vielleicht kommst du so trotzdem schon ein bissl weiter.
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | Geändert von Sleepingbeast am 20.11.09 um 15:41 Uhr | |
|
| Ähnliche Beiträge zum Thema | 31.07.2022 - Morbus95 28.09.2020 - Rennier |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News 
Regeln & Bedingungen
|