27. maj 2002 - 14:58Der er
26 kommentarer og 1 løsning
Funktioner og variabler ???
Ok jeg indrømmer det - jeg har ikke forstået actionscript i flash helt til bunds endnu :-(
Jeg har fem knapper 'button1-5' og jeg har fem variabler 'id1-5' og een 'tom' variabel 'id' som er bestemmende for hvad der sker!!! Ideen var så at når man trykkede på 'button1' så blev variablen 'id' lig med variablen 'id1' - tilsvarende med de andre knapper.
Koden jeg bruger ser sådan ud: for(i=1; i<=5; i++) { _root["button"+i].onRelease = function() { _root.id=_root["id"+i]; } }
Problemet som jeg ser det er, at i har den pågældende værdi (1-5) når funktionen defineres, men når funktionen kaldes, har i skiftet værdi!
Er der en barmhjertig sjæl der har en kreativ løsning på problemet?
Jeg har naturligvis simplificeret min kode her - og er udemærket klar over at brug af denne kode ( '_root.button.onRelease = function() {...}' ) er en besværlig sag til så få knapper!
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
Det er muligvis svært forståeligt, hvad jeg mener! Derfor prøver jeg lige igen - Jeg har lavet følgende kode, som eksempel på hvad jeg mener - sæt den ind i frame 1 i et tomt movieclip!:
for(i=1; i<=5; i++) { _root["id"+i]=i; _root.createEmptyMovieClip("button"+i, i); _root["button"+i].createTextField("tekst",1,0,0,100,20); _root["button"+i].tekst.text = "Dette er min tekst "+i; _root["button"+i].tekst.border = true;
Hov... hvad laver det der "i" i function-definitionen? Det skal ud! For onRelease-funktionen bliver jo kaldt af flash selv, så den får skam ingen argumenter med!!!
Da onRelease-funktionen ikke i sin definition beregner denne værdi, men først beregner den, når der bliver trykket på knappen, så vil "i" altid være 6... Den har kun værdierne 1-5 i meget kort tid mens scriptet udføres. Derfor skal den gemmes i en "lokal" tekststreng i knappen, så den altid kan hentes. Man kan også som paask foreslår det hente den fra knappens statiske instance-navn...
barklund --> Umiddelbart ser dit andet forslag ud til at virke - jeg vil lige prøve det efter i mit rigtige script! :-)
hoejrup --> np
paask --> udemærket cowboytrick, men det skaber desværre nye problemer, hvis jeg fx satte løkken til at køre mellem 1 og 20, da den kun tager højde for eet ciffer!
Forresten så laver paask's løsning en slice() fra den 6 karakter og frem til slutningen af strengen - den ville altså tage alle cifre med uanset længde...
Og så har man i "newmovie" en direkte reference til det nye movieclip istedet for at man skal skrive "parent[name]" hver gang. Men i virkeligheden har det vist sig, at createEmptyMovieClip() rent faktisk helt af sig selv returnerer en reference til det nye movieclip. Derfor kan ovenstående bare skrives som:
Nåja... "var" er et foruddefineret ord, der sørger for at den efterfølgende variabel kun findes inden for det kaldende scope - den inderste blok. Her er det kaldt inden i "for"-blokken, så i starten af næste gennemløb er variabel ukendt og der er den også, lige så snart man kommer uden for løkken i bunden... men det vidst du måske?
Jeg kan se, at jeg endte med at få alle pointene, som var lige vel i overkanten.. hvis nogen føler, at de har lyst til lidt af dem, så bare smider en kommentar...
Ellers mange tak for point, alexander_j... Held og lykke...
Men det ser ud som om, at du har fået rimeligt godt fat i at udnytte Flash MX og dens muligheder med selv at lave knapper og movieclips undervejs... go for it!
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.