Flashhilfe.de - Flash Community

Interval Zeit Durchscnitt [Flash 10]

 


AntwortenRegistrieren Seite1  

Freak1992#1
Benutzerbild von Freak1992
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?
Sleepingbeast#2
Benutzerbild von Sleepingbeast
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
Freak1992#3
Benutzerbild von Freak1992
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
Sleepingbeast#4
Benutzerbild von Sleepingbeast
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'
Freak1992#5
Benutzerbild von Freak1992
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?
Sleepingbeast#6
Benutzerbild von Sleepingbeast
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
Freak1992#7
Benutzerbild von Freak1992
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?
Sleepingbeast#8
Benutzerbild von Sleepingbeast
Beiträge: 579
Wohnort: Halle
Registriert: Apr 2005

20.11.2009, 15:39

klar doch...geht alles ;)
dafür musst du nur das:
ActionScript:
1stage.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:
1setInterval(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

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de