12. februar 2004 - 10:14Der er
7 kommentarer og 1 løsning
Hvad knyttes en "on myHandler" til?
Der er noget grundlæggende jeg ikke har fået styr på: Så vidt jeg har forstået skal et script knyttes til en eller anden form for begivenhed/event: on mouseUp, on Click, on enterFrame osv. Men jeg er flere gange – i hjælpefunktioner og bøger – stødt på scripts a la følgende:
on myHandler beep(3) end
…hvad i alverden knyttes dette script til? Hvordan/hvornår bliver ”on myHandler” sat i værk? Der er mange af disse typer eksempler, men både bog og hjælpefunktion skøjter let henover, hvordan de enkelte scripts flettes ind i den større helhed…
er en function som du selv har skrevet. Den bliver først kaldt (sat i værk) når du beder om det fx.
on startMovie myHandler() end
... on startMovie er en "event handler" som bliver kaldt hver gang det beskrevne (startmovie) event sker. I dette tilfælde beder vi så startmovie-handleren om at kalde den function du selv har lavet (myHandler). Director har en masse predefinered events som kalder tilhørende eventhandlere (hvis de er defineret). Du kan ikke få director til at gøre en skid (med code anyway) med mindre du bruger disse eventhandlere til at sætte din egne ting igang.
...sese, det giver jo mening. Men hvorfor så ikke bare knytte funktionen direkte til "on startMovie"? ...og hvor placerer man funktionen? Skal den ligge som en behavior (et member), som så på en eller anden måde bliver kaldt f.eks. ved "on startMovie"...eller hvad?
Du har under alle omstændigheder besvaret mit spørgsmål - så hermed lidt point...Tak for hjælpen.
Du kan skrive dine egne functions i et hvilket som helst script castmember. Hvis du skriver dem i et moviescript (som også er et castmember), så kan de kaldes alle steder fra, men hvis du skriver dem i en behavior, kan du kun kalde dem hvis behavioren er tilknytten en sprite, for så skal du bruge "sendSprite 20, #myHandler"...
Hele ideen med at skrive egne funktioner er at splitte sin kode op i små overskuelige elementer, som kan bruges i forskellige sammenhænge. Jeg bruger fx jævnligt en funktion som regner afstanden ud mellem to punkter... i stedet for at skrive de linier kode hvergang jeg skal regne afstanden ud, har jeg en funktion som regner det ud og returnere resultatet, og den funktion kalder jeg så hver gang jeg har brug for det.
ex. ("getDist" ligger i et movieScript castmember, og "on enterFrame me" er i en behavior på en sprite)
denne funktion kalder jeg så fx fra en sprite "on enterframe" for at finde ud af om cursoren er tæt på eller langt fra - det kan give en god rollNear effekt!!!
on enterFrame me point1 = sprite(me.spriteNum).loc point2 = the mouseLoc cursorDist = getDist(point1, point2) put cursorDist end
Hvis jeg nu havde 10 sprites der hver især gerne ville holde øje med deres afstand til cursoren, så spare "getDist" mig for en nogle liniers kode i hver af spritenes behavior - desuden er det også kun et sted jeg skal rette hvis nu den regner forkert...
dvs. hvergang jeg genbruger nogle linier kode, kan det svare sig at lave det om til en funktion!!!!
Jamen det virker da helt fornuftigt. Jeg tror jeg vil investere lidt tid i at lave om på mit nuværende projekt, hvor jeg har det samme script/samme function liggende på 31 members. Hver gang jeg skal justere lidt - skal jeg alle 31 members igennem. Dødsygt! (Derfor også mit andet spørgsmål, hvor jeg leder efter en "member(thisMember)"). Tusind tak for hjælpen....
Marianne, det gælder som andre steder i livet, gør det så mageligt så muligt ;-) Ideen med programmering er at kunne overskue det hele via systemer.EN ting er syntaks en anden ting er system. Så snart du kan se at der er ting som er ens, så lav det til en function eller et object som andre kan bruge. Dette er selvfølgelig en genralisering og en lang diskussion værd, men et meget godt udgangspunkt. Tjek også getPropertyDescriptionsList til behaviors
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.