480 likes | 649 Views
Evenimente. Cosmin Varlan. Ce este un eveniment ?. Un eveniment este un “moment special” din viata unui obiect .
E N D
http://www.infoiasi.ro/~flash/prezentari_cerc Evenimente CosminVarlan
http://www.infoiasi.ro/~flash/prezentari_cerc Ceeste un eveniment ? • Un evenimenteste un “moment special” din viataunuiobiect. • Atuncicand se produce un eveniment, toatesarcinileobiectulusunttrecutepeplanuldoi, tratareacorespunzatoare a evenimentuluidevenindprincipalulscop de moment. • Dupatratareacorespunzatoare a evenimentului, obiectulisi continua viata de frame cu frame.
http://www.infoiasi.ro/~flash/prezentari_cerc Ceeste un eveniment ? • Nu toateevenimentelesuntimportantepentru un obiect: - peunele le intereseazacandsunt“clicacite” • pealtele le intereseazacand s-a incarcat o anumitaresursa • saucand se produce o eroare, sauapare o problema de securitate, saucandprimestesaupierdefocusul, candesteapasata o tasta etc.
http://www.infoiasi.ro/~flash/prezentari_cerc Dar ceeste un eveniment? • Un evenimenteste un obiect, instanta a uneiclaseceextindeclasa Events. • Evenimentuleste “aruncat” printr-o procedura “dispatch”
http://www.infoiasi.ro/~flash/prezentari_cerc Dispatch – in dictionar • 1. expediere, trimitere; dispath service = serviciu de expediţie (al unei case comerciale); dispatch note = borderou de expediere; • 2. rezolvare promptă (a unei afaceri); • 3. promptitudine, rapiditate; with all possible dispatch = cu cea mai mare promptitudine; • 4. executare (a unui condamnat), omorâre; happy dispatch = harachiri; • 5. depeşă (diplomatică, telegrafică); • 6. întreprindere de transporturi rapide; • 7. a expedia (o scrisoare, mărfuri); a trimite (un curier); • 8. a omorî; • 9. a rezolva, a lichida repede (o afacere, o chestiune); • 10. a mânca pe nerăsuflate
http://www.infoiasi.ro/~flash/prezentari_cerc Dacapoatefi ? • Cine initiazaaceastaprocedura ? – chiarobiectul. • De ce ? – pentru ca toatalumeasapoataafla (intr-o oarecaremasurace a patit) • Cine poateluamasuri ? (trataevenimentul) - Evenimentulpoatefitratatatat de obiectul care a facut dispatch cat si de oricaredintreparintiilui.
http://www.infoiasi.ro/~flash/prezentari_cerc Cum aflaparintii de eveniment? • Atuncicandobiect de tip evenimentestearuncat (aruncat = dispatch), el treceprintrei faze: capture / targeting / bubbling.
http://www.infoiasi.ro/~flash/prezentari_cerc Usecase • In scenaavem un nod parinte care are doicopii:
http://www.infoiasi.ro/~flash/prezentari_cerc Usecase • Fiecare din copii are atasatevenimentul “Click”. In momentulapasarii: acestuia, evenimentultreceprinceletrei faze (capture / targeting / bubbling ).
http://www.infoiasi.ro/~flash/prezentari_cerc Usecase • Ordineafazeloreste exact ceaexpusamaisus:
http://www.infoiasi.ro/~flash/prezentari_cerc Usecase Capture
http://www.infoiasi.ro/~flash/prezentari_cerc Usecase Target
http://www.infoiasi.ro/~flash/prezentari_cerc Usecase Bubble
http://www.infoiasi.ro/~flash/prezentari_cerc Fratele nu poate “vedea” eventul Usecase
http://www.infoiasi.ro/~flash/prezentari_cerc Cine poate “asculta” evenimentul ? • Oricare din parinti • Obiectul • Din nouoricare din parinti (bubble) Sa traducemtermenii >:) • Capture = captura • Target = tinta • Bubble = ecou
http://www.infoiasi.ro/~flash/prezentari_cerc Let’s Code ! Celetreiobiecte: un parinte, doicopii Evenimente de click pentrufiecare…
http://www.infoiasi.ro/~flash/prezentari_cerc Let’s Code ! Aranjam in scena, desenam … chestii simple pentruprogramatori AS3 asaavansati ca voi…
Functiile - listener nu facdecat trace la numeleobiectului care a capturatevenimentul http://www.infoiasi.ro/~flash/prezentari_cerc Let’s Code !
Dupace s-a apasat NUMAI peprimulcopil http://www.infoiasi.ro/~flash/prezentari_cerc Let’s Code !
http://www.infoiasi.ro/~flash/prezentari_cerc Let’s Code ! TARGET BUBBLE
http://www.infoiasi.ro/~flash/prezentari_cerc Ce s-a intamplat cu faza de “capture”? • Pentru a permiteobiectelor-parintisacapturezeevenimentul in faza de “capture”, comenziiaddEventListener ii maitrebuie un parametru (true). • De faptacumvomatasalistenerul numaipentrufaza de capture, nu si pentru bubble. Here it is
http://www.infoiasi.ro/~flash/prezentari_cerc Re-Run ! CAPTURE TARGET
http://www.infoiasi.ro/~flash/prezentari_cerc Se pot adaugasitoatefazele:
http://www.infoiasi.ro/~flash/prezentari_cerc CAPTURE Re-Run ! TARGET BUBBLE
http://www.infoiasi.ro/~flash/prezentari_cerc De ce e nevoie de toatefazeleastea? • Parintii pot trimite“mesaje” prinintermediulobiecteleor de tip evenimentcatrecopii (siviceversa). • Pentru a face acestlucrutrebuietotusi ca evenimentulsapermitaadaugareamesajului • Un utilizatorpoatecrea un obiect de tip eveniment ca instanta a uneiclase (proprii) care saextinda event… NICE!
http://www.infoiasi.ro/~flash/prezentari_cerc De ce e nevoie de toatefazeleastea? • De cearcrea un utilizatorasaceva ? - de exempluobiectul de tip meniupentru o galeriefotoarputeatrimiteparintilorsai ca toatepozele s-au incarcatca un eveniment: Sa vaziccevamisto: “allMyPicturesAreLoaded” Parintele: “UUUUuuu.. Sa teexploatamatunci”
http://www.infoiasi.ro/~flash/prezentari_cerc Sa creem o clasaCustomEvent… Extindereclasica
http://www.infoiasi.ro/~flash/prezentari_cerc Sa creem o clasaCustomEvent… Un numepentru event este un sir de caractere (de ex: MouseEvent.CLICK == “click”)
http://www.infoiasi.ro/~flash/prezentari_cerc Sa creem o clasaCustomEvent… Se vapropaga in sensinvers ? (aiciartrebuisatrimitem true candfacemobiectul de tip CustomEvent ca saputemsailprindemsi in faza de ecou)
http://www.infoiasi.ro/~flash/prezentari_cerc Sa creem o clasaCustomEvent… I se permitevreunuiobiectsaopreascapropagarea cu “stopPropagation” sau “stopImmediatePropagation” ?
http://www.infoiasi.ro/~flash/prezentari_cerc Sa creem o clasaCustomEvent… Apelamconstructorulsuperclasei cu parametriiprimiti
http://www.infoiasi.ro/~flash/prezentari_cerc Sa creem o clasaCustomEvent… Acestobiect nu poate “duce” nici o proprietate. Sa ilfacemdinamic ca sa-iputemadaugaproprietati la runtime
http://www.infoiasi.ro/~flash/prezentari_cerc WHAT NEXT? • Dupaapasarealui copil1, acestavaporni (intern) un timer: cu setIntervalsivomapela la fiecare 500ms o functie care va genera un numarintregintre 0 si 100. Dacanumarulestedivizibil cu 10 vaaruncaevenimentulnostru de tip CustomEventavandproprietateavaloaresetata cu valoareanumarului. • Rescriemlistenerul “evenimentCopil1”:
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Apelam la fiecare 500ms
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Aceastafunctie
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 In care se genereaza un uintintre 0 si 100
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Si dacaestedivizibil cu 10
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Ceam un obiect de tip CustomEvent
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Evenimentulvafiidentificatprinacest String
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Ii setam o proprietate
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Si ii facem Dispatch
http://www.infoiasi.ro/~flash/prezentari_cerc Evenimentulilvomprindemaiapoiintr-unul din parinti – scena de ex: Care eveniment ? Acesteveniment! Apelfunctie listener (care vaprimi ca parametru un obiect de tip CustomEvent)
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Da, acesta !!!
http://www.infoiasi.ro/~flash/prezentari_cerc evenimentCopil1 Care continevaloareasetata anterior !
http://www.infoiasi.ro/~flash/prezentari_cerc De maimulteoriacelasi event: • Dacape copil1 atasam de maimulteorievenimentulMouseEvent.CLICK, oridneacapturariiestecea a adaugarii (de faptestecreata o lista de evenimentesi in aceastalistaordineaestecea in care s-au adaugat). • Dacavretisamodificatiprioritatea, dupa al treileaparametrureprezentandcapturarea in momentul “capture”, se poateadauga un al patrulea de tip uintreprezentandprioritatea.
http://www.infoiasi.ro/~flash/prezentari_cerc Weak References: • Un ultimparametruatuncicandesteadaugat un evenimenteste “use weak reference” de tip Boolean. Dacaobiectulcaruiai-a fostadaugatevenimentulisipierdetoatereferintele in mod normal acestaartrebuisa fie colectat de garbage collector. Acestlucru se intampla fie dacaatieliminat in prealabilevenimentul fie dacaatisetat ca true valoarealui “use weak reference”.
http://www.infoiasi.ro/~flash/prezentari_cerc Intrebari ?!?!