Flashhilfe.de - Flash Community

Mehrere Counter mit Actionscript gleichzeitig laufen lassen [Flash 9]

 


AntwortenRegistrieren Seite1  

ruemminger#1
Benutzerbild von ruemminger
Beiträge: 6
Wohnort: Rümmingen
Registriert: May 2011

05.05.2011, 15:47

Liebe Leute

Ich habe einen Counter (Zählwerk) erstellt, dass folgende Bedingungen erfüllen muss:
A) Es sind gleichzeitig 3 Zähler, die unterschiedliche Endwerte in einer bestimmten erreichen müssen
B) Der Counter ist in eine komplexe Animation mit Video etc. integriert
C) Die Animation läuft in einer Endlosschleife
D) Der Counter startet automatisch als Teil der Gesamtanimation
E) Der Counter startet in jeder Schleife bei Null
F) Der Counter sollte mindestens 4 oder 5 Stellen haben, d.h.: beginnt bei 0000
G) Die Endwerte sollten definiert werden können z.B.: Counter1 = 1573, Counter2 = 5893 etc.
H) Der Counter sollte nach erreichen der Endwerte stehen bleiben

Nun muss ich noch diese Punkte lösen:
F) Startwerte: 0001, 0002, 0003 etc
G) Endwerte: Nach Möglichkeit sollten diese definiert werden können
H) Counter bleibt stehen (für ein paar Sekunden)

Ich habe die .fla Datei dazugelegt.
Und hier ist mein Actionscrip:

this.TextField("counter_txt1");
this.TextField("counter_txt2");
this.TextField("counter_txt3");

function incrementInterval1():Void {
 var counter:Number = counter_txt1.text;
 counter_txt1.text = Number(counter)+1;
 }
var intervalID:Number = setInterval(incrementInterval1, 1);
 
function incrementInterval2():Void {
 var counter:Number = counter_txt2.text;
 counter_txt2.text = Number(counter)+1;
}
var intervalID:Number = setInterval(incrementInterval2, 50);

function incrementInterval3():Void {
 var counter:Number = counter_txt3.text;
 counter_txt3.text = Number(counter)+1;
}
var intervalID:Number = setInterval(incrementInterval3, 20);
Werbung
Beiträge: 0
Registriert: Feb 2016


cedddy#2
Benutzerbild von cedddy
Beiträge: 572
Registriert: May 2007

05.05.2011, 15:55

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
this.TextField("counter_txt1");
this.TextField("counter_txt2");
this.TextField("counter_txt3");
counter_txt1.text = 10;//belibiger startwert;
counter_txt2.....

function incrementInterval1():Void {
  var counter:Number = counter_txt1.text;
  counter_txt1.text = Number(counter)+1;
  if(counter >= 2000)//2000 ist dein endwert muss in jede function
{
       intervalID = 0; // intervall wird beendet zum wieder starten kannst du ja eine neue function machen die nach einem gewissen intervall wieder das entsprechende intervall startet mit intervalID = setInterval(incrementInterval1, 1);
}
}
var intervalID:Number = setInterval(incrementInterval1, 1);

function incrementInterval2():Void {
  var counter:Number = counter_txt2.text;
  counter_txt2.text = Number(counter)+1;
}
var intervalID:Number = setInterval(incrementInterval2, 50);

function incrementInterval3():Void {
  var counter:Number = counter_txt3.text;
  counter_txt3.text = Number(counter)+1;
}
var intervalID:Number = setInterval(incrementInterval3, 20);

das was ich in der ersten function gemacht habe musst du in allen 3 machen ... .
Bitte keine pn´s wegen irgendwelchen fragen zu Threads, dafür gibt es sie ja schließich
ruemminger#3
Benutzerbild von ruemminger
Beiträge: 6
Wohnort: Rümmingen
Registriert: May 2011

Themenautor/in

05.05.2011, 16:01

Hallo Ceddy

Vielen Dank für die schnelle Antwort.

Das funktioniert nur wenn ich Zahlen wie 10, 112, 1000 etc. eingebe aber dann startet der Counter auch mit diesem Wert.

Der Counter soll mit 0000 beginnen, dann 0001, 0002 etc.
Das heisst die Werte müssen immer 4-stellig sein, auch wenn der Wert erst bei 16 o.ä. ist.

Hast du für das auch eine Lösung?
cedddy#4
Benutzerbild von cedddy
Beiträge: 572
Registriert: May 2007

05.05.2011, 16:07

dann musst du wohl immer prüfen wie lang der counter gerade ist und jeweils nullen dafür davor schreiben auf deine art und weiße bsp
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(counter > 10 && counter < 100)
{
  counter_txt1.text ="00"+counter;
}
if(counter < 10)
{
  counter_txt1.text = "000"+counter;
}
if(counter >100 && counter < 1000)
{
    counter_txt.text = "0" + counter;
}
if(counter > 1000)
{
  counter_txt.text = counter;
}
Bitte keine pn´s wegen irgendwelchen fragen zu Threads, dafür gibt es sie ja schließich
Werbung
Beiträge: 0
Registriert: Feb 2016


ruemminger#5
Benutzerbild von ruemminger
Beiträge: 6
Wohnort: Rümmingen
Registriert: May 2011

Themenautor/in

05.05.2011, 16:16

Besten Dank.
Sowas hatte ich auch schon probiert.
Aber aus unerklärlichen Gründen passiert nichts.
andrelehnert#6
Benutzerbild von andrelehnert
Beiträge: 37
Registriert: Dec 2010

08.05.2011, 15:08

so unerklärlich ist das gar nicht :)

Du instanzierst bei jedem jedem Tick des Intervals die Variable "counter" neu...
Du solltest drei Klassenvariablen nutzen (z,B. count1,count2,count3) und diese dann jeweils
in den IntervalFunktionen hochzählen.

LG ANdré
Geändert von andrelehnert am 08.05.11 um 15:08 Uhr
andrelehnert#7
Benutzerbild von andrelehnert
Beiträge: 37
Registriert: Dec 2010

08.05.2011, 15:16

Hier mal ne bessere Funktion zum vorhängen der Nullen:
ActionScript:
1
2
3
4
5
6
7
8
9
10
function checkZeros(num:Number):String{
  var zeros:String=""
  if (num<10){zeros ="000"}
    else if (num<100){zeros = "00"}
    else if (num<1000){zeros = "0"}
  var outputString:String = zeros+num.toString();
  return outputString;
}
// Anwendung dieser Funktion:
textfield1.text = checkZeros(count1);


LG ANdré
Geändert von andrelehnert am 09.05.11 um 01:11 Uhr
ruemminger#8
Benutzerbild von ruemminger
Beiträge: 6
Wohnort: Rümmingen
Registriert: May 2011

Themenautor/in

09.05.2011, 09:12

Hallo André

Das hatte ich auch schon probiert.
Ging leider auch nicht.
ruemminger#9
Benutzerbild von ruemminger
Beiträge: 6
Wohnort: Rümmingen
Registriert: May 2011

Themenautor/in

09.05.2011, 09:15

Hallo André

Ich habe das versucht:

this.TextField("counter_txt1");
this.TextField("counter_txt2");
this.TextField("counter_txt3");

function incrementInterval1():Void {
 var counter:Number = counter_txt1.text;
 counter_txt1.text = Number(counter)+1;
 }
var intervalID:Number = setInterval(incrementInterval1, 1);
 
function incrementInterval2():Void {
 var counter:Number = counter_txt2.text;
 counter_txt2.text = Number(counter)+1;
}
var intervalID:Number = setInterval(incrementInterval2, 50);


function incrementInterval3():Void {
 var counter:Number = counter_txt3.text;
 counter_txt3.text = Number(counter)+1;
}
var intervalID:Number = setInterval(incrementInterval3, 20);

function checkZeros(num:Number):String{
  var zeros:String="";
  if (num<10){zeros ="000"}
    else if (num<100){zeros = "00"}
    else if (num<1000){zeros = "0"}
  var outputString:String = zeros+num.toString();
  return outputString;
}
// Anwendung dieser Funktion:
textfield1.text = checkZeros(count1);


In der letzten Zeile hatte ich dann textfield1.text  durch counter_txt1.text ersetzt.

Ging leider auch nicht.
Wo liegt der Fehler im Script?
Ich bin leider Anfänger mit Actionscript.

Grüsse Rümminger

Angehängte Dateien:
Adobe Flash Quelldatei Counter_B_06.fla24.50 KB
andrelehnert#10
Benutzerbild von andrelehnert
Beiträge: 37
Registriert: Dec 2010

09.05.2011, 09:35

Hi,
Lass mal in Deiner FLA nur das Schlüsselbild mit dem Code und den Textfeldern stehen - Lösche alle anderen SchlüsselBilder.
Nun hast Du genau ein Schlüsselbild.
Im Actionscriptfenster löscht Du Deinen Code und trägst Ddiesen hier ein :)


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
29
30
31
32
33
34
35
36
37
38
39
var counter1:Number=0;
var counter2:Number=0;
var counter3:Number=0;
var countFinish1:Number = 456;
var countFinish2:Number = 234;
var countFinish3:Number = 123;
function incrementInterval1():Void
  counter_txt1.text = checkZeros(++counter1);
  checkForEnd(intervalID1,counter1,countFinish1);
}
var intervalID1:Number = setInterval(incrementInterval1, 1);

function incrementInterval2():Void {
  counter_txt2.text = checkZeros(++counter2);
  checkForEnd(intervalID2,counter2,countFinish2);
}
var intervalID2:Number = setInterval(incrementInterval2, 20);


function incrementInterval3():Void {
  counter_txt3.text = checkZeros(++counter3);
  checkForEnd(intervalID3,counter3,countFinish3);
}
var intervalID3:Number = setInterval(incrementInterval3, 40);

function checkZeros(num:Number):String{
    var zeros:String="";
    if (num<10){zeros ="000"}
      else if (num<100){zeros = "00"}
      else if (num<1000){zeros = "0"}
    var outputString:String = zeros+num.toString();
    return outputString;
}
function checkForEnd(intId:Number, counter:Number, countFinish:Number):Void{
     if (counter>=countFinish){
        clearInterval(intId);
     }
     
}


LG ANdré
Geändert von andrelehnert am 09.05.11 um 09:36 Uhr
ruemminger#11
Benutzerbild von ruemminger
Beiträge: 6
Wohnort: Rümmingen
Registriert: May 2011

Themenautor/in

09.05.2011, 10:21

Hallo André

Das ist ja super!
Vielen, vielen Dank.
Das Script funktioniert nun genauso, wie ich es wollte.
Jetzt muss ich es nur noch in der Gesamtanimation in einer Schleife testen.
Ich hoffe, das das funktioniert.
Ich danke dir auf jeden Fall erst einmal recht herzlich.

Grüsse Rümminger

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   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de