Avatar billede runeryberg Nybegynder
22. juni 2007 - 12:45 Der er 14 kommentarer og
1 løsning

Actionscript for tekstfelt der skal tælle op fra X til Y

hej,
Jeg har søgt og søgt for at finde et actionscript (eller en tutorial på hvordan man gør) der kan få et tekstfelt til at tælle op fra et givet tal, fx 20, til et andet tal, fx 149, over fx 30 frames i en alm. flash movie.
Jeg synes ikke at kunne finde andet end hit-tællere.

Det skal foregå sådan, at jeg kun behøver at taste det første tal ind (X) og dernæst det sidste tal ind (Y) og så skal scriptet smide tallene imellem X og Y ind over de 30 frames den afspiller.
Avatar billede martin_dalgaard Nybegynder
22. juni 2007 - 15:40 #1
hmm er det ikke lidt matematik? 

Find forskellen:
Z = Y-X

Find hvor meget den skal stige hver frame.

S = Z/30.

også plus S hver frame i 30 frames
Avatar billede runeryberg Nybegynder
22. juni 2007 - 18:32 #2
jo. Det lyder rigtigt.
Spørgsmålet er bare hvordan det skal skrives i actionscriptet for at få det til at virke.
Avatar billede alexander_j Nybegynder
24. juni 2007 - 01:20 #3
Put nedenstående ind i første frame i din flashfilm.

//disse variabler kan du sætte
x = 20;
y = 149;
f = 30;
//her er selve koden
c = x;
this.createTextField( "tf" , this.getNextHighestDepth() , 0 , 0 , 100 , 25 );
this.onEnterFrame = function() {
    if ( c < y ) {
        c += (y-x)/f;
        tf.text = Math.round( c );
    } else delete this.onEnterFrame;
}
Avatar billede runeryberg Nybegynder
24. juni 2007 - 13:18 #4
ok, Det prøver jeg lige senere i dag (er på arbejde lige nu).
Avatar billede runeryberg Nybegynder
24. juni 2007 - 21:22 #5
ok, så har jeg fået lejlighed til at afprøve scriptet, og det er tæt på at virke som jeg vil have det til.

I stedet for at den opretter en tekst i første frame, skal jeg have den til at fungere i et tekstfelt jeg allerede selv har lavet.

jeg har oprettet en dynamic tekst og lavet en instance til den. Jeg forestiller mig at actionscripten så skal sættes på instancen, har jeg ret?
Avatar billede alexander_j Nybegynder
24. juni 2007 - 22:13 #6
Hvis du ikke vil have den til at lave et tekstfelt automatisk for dig, men i stedet bruge et tekstfelt du selv har lavet, så skal du udelade denne linie:
this.createTextField( "tf" , this.getNextHighestDepth() , 0 , 0 , 100 , 25 );

Hvad mener du med at du har lavet en instance til dit tekstfelt?

Det instance navn du har skal i hvert rettes i min kode så der står:
ditInstanceNavn.text = Math.round( c );
i stedet for:
tf.text = Math.round( c );

Skal brugeren kunne indtaste start og slut værdier (x og y) eller hvordan skal det hele sættes i gang?
Avatar billede runeryberg Nybegynder
24. juni 2007 - 22:42 #7
nej, slutresultatet skal bare være en flash-movie der afspiller. brugeren skal ikke kunne gøre noget.

Jeg tror jeg fik sagt noget forkert før mht. instancen.  8)

Det jeg har gjordt nu er:
først har jeg oprettet en dynamic tekst. Den har jeg givet et instance name (er det ikke nødvendigt for at man kan anvende actionscript i tekst?) og kaldt den for txt. Den har jeg så convert'et til et movieclip symbol. Den hedder "counter". Derefter har jeg redigeret i din kode så den ser sådan her ud:



x = 20;
y = 149;
f = 30;
c = x;
this.onEnterFrame = function() {
    if ( c < y ) {
        c += (y-x)/f;
        txt.text = Math.round( c );
    } else delete this.onEnterFrame;
}




men når jeg tester med en check syntax, kommer følgende fejlmelding op:





**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 1: Statement must appear within on/onClipEvent handler
    x = 20;

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 2: Statement must appear within on/onClipEvent handler
    y = 149;

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 3: Statement must appear within on/onClipEvent handler
    f = 30;

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 4: Statement must appear within on/onClipEvent handler
    c = x;

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 5: Statement must appear within on/onClipEvent handler
    this.onEnterFrame = function() {

Total ActionScript Errors: 5     Reported Errors: 5




Det er sikkert noget helt almindeligt banalt jeg har gjordt forkert...
Avatar billede alexander_j Nybegynder
24. juni 2007 - 23:59 #8
Prøv med:

onClipEvent (load)
{
    x = 20;
    y = 149;
    f = 30;
    c = x;
    this.onEnterFrame = function() {
        if ( c < y ) {
            c += (y-x)/f;
            txt.text = Math.round( c );
        } else delete this.onEnterFrame;
    }
}
Avatar billede runeryberg Nybegynder
25. juni 2007 - 01:07 #9
super!
Det sidste actionscript her fungere perfekt.
Mange tak skal du ha.
Avatar billede alexander_j Nybegynder
25. juni 2007 - 19:19 #10
Det var så lidt.
Avatar billede runeryberg Nybegynder
29. juni 2007 - 15:57 #11
på trods af jeg har fået hjælp til mit problem og løsningen er fundet, har jeg alligevel et relateret spørgsmål.

Ang. ovenstående tæller, er det muligt at indsætte punktummer ved hver tre cifre? Den kommer nemlig til at tælle op til lidt over en million, og det ville være en stor fordel hvis jeg kunne vise tallene således: 1.386.345 frem for sådan her: 1386345.

Jeg vil meget gerne give yderligere point (skal jeg så oprette et nyt spørgsmål?)
Avatar billede alexander_j Nybegynder
29. juni 2007 - 17:31 #12
hov fejl - kigger lige igen!
Avatar billede alexander_j Nybegynder
29. juni 2007 - 17:36 #13
Alt for dig min ven.

var x:Number = 20;
var y:Number = 1386345;
var f:Number = 30;
var c:Number = x;
this.onEnterFrame = function() {
    if ( c+x < y ) {
        c += (y-x)/f;
        var d:String = Math.round(c+x).toString();
        var e:String = "";
        for ( var i = d.length-1 ; i >= 0 ; i-- ) {
            e = d.charAt(i) + e;
            if ( (d.length-i) - Math.floor((d.length-i)/3)*3 == 0 and i != 0) e = "." + e;
        }
        txt.text = e;
    } else delete this.onEnterFrame;
}

Normalt skal du lave et nyt spørgsmål, hvis du vil give nye point, men da jeg ikke rigtig er pointinteresseret, så lad være.
Avatar billede runeryberg Nybegynder
01. juli 2007 - 02:12 #14
yeah!
Det virker super-godt!
Alexander, jeg sender dig alt den gode karma jeg kan. Tusind tak for din hjælp!
Avatar billede alexander_j Nybegynder
01. juli 2007 - 08:41 #15
Tak Master Fatman :-P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester