1
Evenimente
Cosmin Varlan
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
http://www.infoiasi.ro/~flash/prezentari_cerc
2
Ce este un eveniment ?
• Un eveniment este un “moment special” din viata unui obiect.
• Atunci cand se produce un eveniment, toate sarcinile obiectulu sunt trecute pe planul doi, tratarea corespunzatoare a evenimentului devenind principalul scop de moment.
• Dupa tratarea corespunzatoare a evenimentului, obiectul isi continua viata de frame cu frame.
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
3
Ce este un eveniment ?
• Nu toate evenimentele sunt importante pentru un obiect:
- pe unele le intereseaza cand sunt “clicacite”- pe altele le intereseaza cand s-a incarcat o
anumita resursa- sau cand se produce o eroare, sau apare o
problema de securitate, sau cand primeste sau pierde focusul, cand este apasata o tasta etc.
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
4
Dar ce este un eveniment?
• Un eveniment este un obiect, instanta a unei clase ce extinde clasa Events.
• Evenimentul este “aruncat” printr-o procedura “dispatch”
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
5
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
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
6
Daca poate fi ?
• Cine initiaza aceasta procedura ? – chiar obiectul.
• De ce ? – pentru ca toata lumea sa poata afla (intr-o oarecare masura ce a patit)
• Cine poate lua masuri ? (trata evenimentul) - Evenimentul poate fi tratat atat de obiectul
care a facut dispatch cat si de oricare dintre parintii lui.
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
7
Cum afla parintii de eveniment?
• Atunci cand obiect de tip eveniment este aruncat (aruncat = dispatch), el trece prin trei faze: capture / targeting / bubbling.
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
8
Usecase
• In scena avem un nod parinte care are doi copii:
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
9
Usecase
• Fiecare din copii are atasat evenimentul “Click”. In momentul apasarii: acestuia, evenimentul trece prin cele trei faze (capture / targeting / bubbling ).
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
10
Usecase
• Ordinea fazelor este exact cea expusa mai sus:
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
11
Usecase
Cosmin Vârlan
Capture
http://www.infoiasi.ro/~flash/prezentari_cerc
12
Usecase
Cosmin Vârlan
Target
http://www.infoiasi.ro/~flash/prezentari_cerc
13
Usecase
Cosmin Vârlan
Bubble
http://www.infoiasi.ro/~flash/prezentari_cerc
14
Usecase
Cosmin Vârlan
Fratele nu poate
“vedea” eventul
http://www.infoiasi.ro/~flash/prezentari_cerc
15
Cine poate “asculta” evenimentul ?
• Oricare din parinti• Obiectul• Din nou oricare din parinti (bubble)
Sa traducem termenii >:)1. Capture = captura2. Target = tinta3. Bubble = ecou
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
16
Let’s Code !
Cosmin Vârlan
Cele trei obiecte: un parinte, doi copii
Evenimente de click pentru
fiecare…
http://www.infoiasi.ro/~flash/prezentari_cerc
17
Let’s Code !
Cosmin Vârlan
Aranjam in scena, desenam … chestii simple pentru
programatori AS3 asa avansati ca voi…
http://www.infoiasi.ro/~flash/prezentari_cerc
18
Let’s Code !
Cosmin Vârlan
Functiile - listener nu fac decat trace la numele obiectului care
a capturat evenimentul
http://www.infoiasi.ro/~flash/prezentari_cerc
19
Let’s Code !
Cosmin Vârlan
Dupa ce s-a apasat NUMAI pe primul copil
http://www.infoiasi.ro/~flash/prezentari_cerc
20
Let’s Code !
Cosmin Vârlan
TARGET
BUBBLE
http://www.infoiasi.ro/~flash/prezentari_cerc
21
Ce s-a intamplat cu faza de “capture”?
• Pentru a permite obiectelor-parinti sa captureze evenimentul in faza de “capture”, comenzii addEventListener ii mai trebuie un parametru (true).
• De fapt acum vom atasa listenerul numai pentru faza de capture, nu si pentru bubble.
Cosmin Vârlan
Here it is
http://www.infoiasi.ro/~flash/prezentari_cerc
22
Re-Run !
Cosmin Vârlan
TARGET
CAPTURE
http://www.infoiasi.ro/~flash/prezentari_cerc
23
Se pot adauga si toate fazele:
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
24
Re-Run !
Cosmin Vârlan
CAPTURE
TARGET
BUBBLE
http://www.infoiasi.ro/~flash/prezentari_cerc
25
De ce e nevoie de toate fazele astea?
• Parintii pot trimite “mesaje” prin intermediul obiecteleor de tip eveniment catre copii (si viceversa).
• Pentru a face acest lucru trebuie totusi ca evenimentul sa permita adaugarea mesajului
• Un utilizator poate crea un obiect de tip eveniment ca instanta a unei clase (proprii) care sa extinda event… NICE!
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
26
De ce e nevoie de toate fazele astea?
• De ce ar crea un utilizator asa ceva ? - de exemplu obiectul de tip meniu pentru o
galerie foto ar putea trimite parintilor sai ca toate pozele s-au incarcat ca un eveniment:
Sa va zic ceva misto: “allMyPicturesAreLoaded”
Parintele: “UUUUuuu.. Sa te exploatam atunci”
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
27
Sa creem o clasa CustomEvent…
Cosmin Vârlan
Extindere clasica
http://www.infoiasi.ro/~flash/prezentari_cerc
28
Sa creem o clasa CustomEvent…
Cosmin Vârlan
Un nume pentru event este un sir de caractere (de ex:
MouseEvent.CLICK == “click”)
http://www.infoiasi.ro/~flash/prezentari_cerc
29
Sa creem o clasa CustomEvent…
Cosmin Vârlan
Se va propaga in sens invers ?(aici ar trebui sa trimitem true
cand facem obiectul de tip CustomEvent ca sa putem sa il
prindem si in faza de ecou)
http://www.infoiasi.ro/~flash/prezentari_cerc
30
Sa creem o clasa CustomEvent…
Cosmin Vârlan
I se permite vreunui obiect sa opreasca propagarea cu “stopPropagation” sau
“stopImmediatePropagation” ?
http://www.infoiasi.ro/~flash/prezentari_cerc
31
Sa creem o clasa CustomEvent…
Cosmin Vârlan
Apelam constructorul superclasei cu parametrii primiti
http://www.infoiasi.ro/~flash/prezentari_cerc
32
Sa creem o clasa CustomEvent…
Cosmin Vârlan
Acest obiect nu poate “duce” nici o proprietate. Sa il facem dinamic
ca sa-i putem adauga proprietati la runtime
http://www.infoiasi.ro/~flash/prezentari_cerc
33
WHAT NEXT?
• Dupa apasarea lui copil1, acesta va porni (intern) un timer: cu setInterval si vom apela la fiecare 500ms o functie care va genera un numar intreg intre 0 si 100. Daca numarul este divizibil cu 10 va arunca evenimentul nostru de tip CustomEvent avand proprietatea valoare setata cu valoarea numarului.
• Rescriem listenerul “evenimentCopil1”:
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
34
evenimentCopil1
Cosmin Vârlan
Apelam la fiecare 500ms
http://www.infoiasi.ro/~flash/prezentari_cerc
35
evenimentCopil1
Cosmin Vârlan
Aceasta functie
http://www.infoiasi.ro/~flash/prezentari_cerc
36
evenimentCopil1
Cosmin Vârlan
In care se genereaza un uint
intre 0 si 100
http://www.infoiasi.ro/~flash/prezentari_cerc
37
evenimentCopil1
Cosmin Vârlan
Si daca este divizibil cu 10
http://www.infoiasi.ro/~flash/prezentari_cerc
38
evenimentCopil1
Cosmin Vârlan
Ceam un obiect de tip
CustomEvent
http://www.infoiasi.ro/~flash/prezentari_cerc
39
evenimentCopil1
Cosmin Vârlan
Evenimentul va fi identificat prin
acest String
http://www.infoiasi.ro/~flash/prezentari_cerc
40
evenimentCopil1
Cosmin Vârlan
Ii setam o proprietate
http://www.infoiasi.ro/~flash/prezentari_cerc
41
evenimentCopil1
Cosmin Vârlan
Si ii facem Dispatch
http://www.infoiasi.ro/~flash/prezentari_cerc
42
Evenimentul il vom prinde mai apoi intr-unul din parinti – scena de ex:
Cosmin Vârlan
Care eveniment ? Acest eveniment!
Apel functie listener (care va primi ca
parametru un obiect de tip CustomEvent)
http://www.infoiasi.ro/~flash/prezentari_cerc
43
evenimentCopil1
Cosmin Vârlan
Da, acesta !!!
http://www.infoiasi.ro/~flash/prezentari_cerc
44
evenimentCopil1
Cosmin Vârlan
Care contine valoarea setata anterior !
http://www.infoiasi.ro/~flash/prezentari_cerc
45Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
46
De mai multe ori acelasi event:
• Daca pe copil1 atasam de mai multe ori evenimentul MouseEvent.CLICK, oridnea capturarii este cea a adaugarii (de fapt este creata o lista de evenimente si in aceasta lista ordinea este cea in care s-au adaugat).
• Daca vreti sa modificati prioritatea, dupa al treilea parametru reprezentand capturarea in momentul “capture”, se poate adauga un al patrulea de tip uint reprezentand prioritatea.
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
47
Weak References:
• Un ultim parametru atunci cand este adaugat un eveniment este “use weak reference” de tip Boolean. Daca obiectul caruia i-a fost adaugat evenimentul isi pierde toate referintele in mod normal acesta ar trebui sa fie colectat de garbage collector. Acest lucru se intampla fie daca ati eliminat in prealabil evenimentul fie daca ati setat ca true valoarea lui “use weak reference”.
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
48
Intrebari ?!?!
Cosmin Vârlan