Avatar billede marrix Juniormester
12. februar 2004 - 10:14 Der 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…

…en letforståelig forklaring udbedes, venligst :-)
Avatar billede ask-m Nybegynder
12. februar 2004 - 11:22 #1
on myHander
  beep(3)
end

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.

Håber det giver mening

Ask-M
Avatar billede marrix Juniormester
12. februar 2004 - 14:16 #2
Hej ask-m

...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.

Venligst
Marianne
Avatar billede ask-m Nybegynder
12. februar 2004 - 14:34 #3
Hej Marianne,

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)

on getDist point1, point2
  x1 = point1[1]
  y1 = point1[2]
  x2 = point2[1]
  y2 = point2[2]

  theDist = sqrt( power((x2 - x1), 2) + power((y2-y1), 2) )
  return theDist
end

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!!!!

Ask-M
Avatar billede marrix Juniormester
13. februar 2004 - 14:15 #4
Hej ask-m

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....

Venligst
Marianne
Avatar billede kanding Nybegynder
16. februar 2004 - 10:03 #5
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
Avatar billede marrix Juniormester
16. februar 2004 - 15:53 #6
Hej kanding

Tak for det gode råd.....livet (med Director, forstås) bliver lidt nemmere nu.

Gid man kunne lave en function eller object til rengøring og havearbejde også ;-)

(...så kunne jeg bruge meget mere tid på Director, hæhæ)

Allervenligst
Marianne
Avatar billede kanding Nybegynder
16. februar 2004 - 16:59 #7
prøv:
on idle
doCleaning()
doGarden()
emptyTrash()
doDishes()
end
Avatar billede marrix Juniormester
18. februar 2004 - 08:55 #8
Hæhæhæ. Jeg prøver....
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
Kurser inden for grundlæggende programmering

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