22. juni 2007 - 12:45Der 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.
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; }
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?
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...
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; } }
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?)
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.
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.