Avatar billede babysus85 Nybegynder
12. juli 2008 - 00:02 Der er 11 kommentarer og
1 løsning

event i for-loop - løses nok med event listener, men hvordan?

for(var i=1;i<11;i++){
  this["btn_"+i].onRollOver = function() {
      trace(i);
  }
}

Jeg ønsker at når man klikker på btn_1 traces "1". Ved btn_2 traces "2"...osv. Men det virker ikke, da - efter hvad jeg har forstået - loopet løbes igennem først, og først derefter, når jeg klikker på en af knapperne, vil der altid traces "10".

Hvordan kringler man denne? Det er vist noget med addEventListener(). Men jeg forstår ikke hvordan jeg fletter det sammen med ovenstående.
Avatar billede Slettet bruger
12. juli 2008 - 00:17 #1
Det er fordi, i er den samme for alle dine knapper. En løsning kunne være:

for(var i=1;i<11;i++){
  this["btn_"+i].counterValue = i;
  this["btn_"+i].onRollOver = function() {
      trace(counterValue);
  }
}
Avatar billede babysus85 Nybegynder
12. juli 2008 - 00:30 #2
yes. Det virker. Dog lige med en lille bitte tilføjelse

for(var i=1;i<11;i++){
  this["btn_"+i].counterValue = i;
  this["btn_"+i].onRollOver = function() {
      trace(this.counterValue);      //tilføjet "this."
  }
}

tak! Smid et svar
Avatar billede maqhem Nybegynder
12. juli 2008 - 00:30 #3
Gør dig nu dine egne erfaringer med dette her! For jeg har lavet denne fejl cirka en million gange. Problemet er, at når du trykker på knappen, spørger den efter referencen i, som på dette her tidspunkt er nået ti, fordi loopet er sluttet for længst inden du kan nå at trykke på knappen. Det lidt klamme hack, som hf2ke har vist, er også altid den løsning, jeg har gjort brug af. Eller du kan lave noget endnu mere klamt:

for(var i=1;i<11;i++){
  this["btn_"+i].onRollOver = function() {
      trace(this._name.split("_")[1]);
  }
}

Men sådan noget gjorde man kun dengang man var helt ny i Flash ;)

I virkeligheden giver dit spørgsmål rigtigt god mening, for som jeg ser det, skal den enten huske på i's værdi og trace det rigtige - som dit eksempel burde gøre. Eller trace undefined eller give en fejl, hvis den kører strict efter princippet med, at i er en reference. For faktisk er i en lokal variabel, og den bliver slettet lige så snart, loopet er færdigt. Så at den tracer i's slutværdi er lidt hul-i-hovedet-agtigt.
Men gør som hf2ke, og så har du en løsning, der aldrig svigter.
Avatar billede Slettet bruger
12. juli 2008 - 00:40 #4
Må jeg spørge, hvad du skal bruge det til? At kende instansens nummer?
Avatar billede maqhem Nybegynder
12. juli 2008 - 00:46 #5
Sådan en lille block kan da bruges til meget. Han lægger bare en event listener på flere movieclips i et loop - skidesmart :)
Det kunne også være, han senere hen omskrev til følgende:

---
for(var i = 1;i < 11; i++) {
  this["btn_"+i].counterValue = i;
  this["btn_"+i].onRollOver = BRO;
}
functino BRO():void {
  switch(this.counterValue) {
    case 1:
      trace("Måske er denne knap Home?");
      break;

    case 2:
      trace("Og så kan denne knap være Contacts.");
      break;

    // Øvrige cases
}
---

Og så har han en brugbar, generel funktion, der kan klare alle knappers kald hver for sig.
Avatar billede maqhem Nybegynder
12. juli 2008 - 00:48 #6
... eller "hun".
Avatar billede Slettet bruger
12. juli 2008 - 00:51 #7
... eller den :)
Avatar billede maqhem Nybegynder
12. juli 2008 - 00:53 #8
... eller du.
... eller ikke :S

Og nu skal vi vidst stoppe, for vi spammer jo vedkommendes mailboks helt vildt.
Avatar billede babysus85 Nybegynder
12. juli 2008 - 20:21 #9
Jeg er ved at lave et lille spil til min 3-årige søn, der er helt vild med at genkende bogstaver. Et projekt jeg fandt på, for at lære mere flash og as2. I en frame vil jeg placere alle alfabetets bogstaver oven på grafik der ligner sæbebobler (dette er mine knapper). Og ved rollOver skal bogstavlyden afspilles fra en mp3, og ved klik kommer man ind i en bane hvor man skal finde bogstaver magen til det man valgte.
Derfor ville jeg gerne have alle knappernes events defineret dynamisk. Men der var jo ingen grund til at skrive alt den kode her, da det jo er nemmere at svare på spørgsmålet, når alt unødvendigt er barberet fra. Jeg synes det kan være svært at gennemskue andres koder, når der er en milliard af deres egne variabelnavne i. Men jeg er jo heller ikke hverken prof eller uddannet eller noget.
I øvrigt er jeg en pige.
Avatar billede Slettet bruger
12. juli 2008 - 22:08 #10
En pige?! På Eksperten?!?!?!
Ej, godt det ikke kun er mænd :) Det er snart svært at trække været for bare testosteron!

Anyway. Lyder som et godt og lærerigt projekt - for både dig og din søn. Egentlig kan du lave det mere logisk med klasser, men lad bare det vente til du er kommet ordentligt igang med Flash. Når du engang er færdig med projektet (det tager altid liiige lidt længere end forventet!), kunne det da være, du skulle publisere det på nettet? Det kan vel have interresse for flere børn/forældre.

Og lige en sidste kommentar: Du skriver, at du gerne vil lære mere AS2. Hvis du alligevel søger erfaring og ny viden inden for AS, kan du med fordel kikke på AS3 (der er mere effektivt og logisk end AS2) - men det er nok, uanset hvad, smartest at gøre dette projekt færdigt, før du kaster dig ud i AS3.
Avatar billede maqhem Nybegynder
12. juli 2008 - 23:13 #11
Ah! Jeg tænkte nok, det var en pige, vi havde med at gøre. Babysus85 er vel sat sammen af "baby", "sus" og "85". "baby" er et nickname, "sus" kan enten være et pigenavn eller en forkortelse eller et kælenavn for diverse pigenavne (sussie, susanne etc. (hvor knap så mange drenge bliver kaldt "sus")), og "85" er garanteret et fødselsårstal. Jeg lyder som en hel analytiker nu. Måske jeg skulle skifte branche.

Anyway (godt ord). Det er fedt, når folk tager Flash med hjem, hvis du spørger mig. Jeg har brugt det meget til skoleprojekter etc., og det ved jeg, hf2ke også har, for sådan cirka alle sammen var sammen med ham. Flash er genialt.

Desuden er jeg helt enig i, at du burde se på AS3 snarest muligt, så du kan nå at vænne dig til det "moderne" fra starten af ;)
Og jeg forstår dig nu godt, at du ikke vil have for lange koder, andre har skrevet. Det kan være svært at fortolke andres idéer, navne, rækkefølger og måder at gøre tingene på. Vi plejer dog her på eksperten at være ret flinke med at gøre koderne så nemme at tolke som overhovedet muligt. Hvorimod jeg i mine egne projekter bruger klamme forkortelser og navne alle steder. I mit nuværende projekt har jeg variablen ppatswtw, og så kan du jo prøve at gætte, hvad det står for. Faktisk har jeg glemt det lige på stående fod, men det er ligemeget, når jeg ved, hvad den gør. Og nu løb jeg fra emnet igen. Så jeg retter lige til:

Er der noget, du mangler hjælp til? Så spørger du bare. Og du kan bare spørge i samme tråd, hvis du vil det.
Og jeg kan da lige slutte af med at fortælle, at addEventListener er AS3, så at blandet det ind i billedet er spild af hjerneceller og bekymringer :)
Avatar billede Slettet bruger
13. juli 2008 - 02:36 #12
Fucking Christ... Og hvis du ikke ved, hvad du skal få tiden til at gå med, kan du bare spørge maqhem - som du kan se, skriver han ofte en hel masse ^^
Men jeg vil nu tie stille herfra. Farveller.
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



IT-JOB