AS3 Quick Tips: Hacking hendelses Flow

AS3 Quick Tips: Hacking hendelses Flow
Del
Del
7
Del
Dette Cyber ​​Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Noen ganger kan du finne deg selv ønsker å endre oppførselen til en komponent for en bruker inngangshendelse. Denne artikkelen vil forklare hvordan du gjør dette ved å endre arrangementet objektet in-flight, før det er behandlet av komponenten. Det er riktig, du kan ligge og jukse. I kode.



Eksempel

Anta at vi har en liste komponent for brukeren å velge flere elementer fra. Vi har satt sin allowMultipleSelection eiendom til sann, noe som ville tillate det å ha mer enn én valgte elementer (derav navnet). Men dette krever fortsatt at brukeren holder nede Ctrl-tasten, mens du klikker for å velge flere elementer. Når en enkelt valgte elementet er unntaket, ikke regelen, ville det være bedre om vi ikke gjøre brukeren hold Ctrl-tasten hver gang!

Komponenten avgjør om brukeren holder Ctrl-tasten etter undersøke ctrlKey eiendommen av MouseEvent arrangementet objektet. I eksempelet ovenfor, kan vi lure komponenten, ved å gjøre det vises at Ctrl-tasten trykkes.

La oss se på hvordan dette gjøres ...



Trinn 1 : Sett opp Flash Document

Hvis du allerede vet hvordan du skal lage Flash-applikasjoner (du sannsynligvis gjøre) kan du hoppe over å lese dette trinnet, men husk at det finnes en forekomst av en liste komponent antas i neste skritt. Bare i tilfelle, la oss kort forklare etableringen av prosjektet.

Opprett en ny FLA (her heter htefExample.fla
) og et nytt dokument klasse Actionscript-fil (her heter htefExample.as) .

Angi egenskapene til FLA filen og knytte dokumentet klassen.
bredde FLA er satt til 300, er høyden til 200 og "Class" input-feltet satt til 'htefExample' ».

Dra en liste komponent fra Components panelet til biblioteket.
I biblioteket liste symbol og sine eiendeler finnes.

Skriv ut dokumentet klasse ( htefExample . .as
)
pakke {import flash.display.Sprite, import flash.events.MouseEvent, import fl.controls.List, import fl.data.DataProvider; public class htefExample strekker Sprite {private Var liste: liste; funksjon htefExample () {//oppretter en forekomst liste = new List (); //og sette noen egenskaper list.width = 200; list.x = 50; list.y = (200-list.height) /2; //satt allowMultipleSelection list.allowMultipleSelection = true; //Legge data list.dataProvider = ny dataprovider ([{label: "One", data: 1} {label: "Two", data: 2}, {label: "Tre", data: 3} {label : "Fire", data: 4} {label: "Five", data: 5}]); //Legger for å vise liste this.addChild (liste); }}}



Trinn 2: Legg til en hendelse lytteren til Capturing Fase

signaturen til addEventListener metoden er:

addEventListener (type: String, lytteren: Funksjon, useCapture: Boolean = false, prioritet: int = 0, useWeakReference: Boolean = false): void

For å legge til en lytter til fange fase, satt den tredje parameter (useCapture) til sann
listen.. addEventListener (MouseEvent.CLICK, hackMouseListener, true);



Trinn 3: Definer Innholdet i List Function

I kroppen av funksjonen, setter ctrlKey eiendom til sann
. privat funksjon hackMouseListener (e: MouseEvent): void {//satt ctrlKey eiendom e.ctrlKey = true;}



Hvordan det fungerer

Flash Player har en modell for utsending hendelser og kaller hendelsen lyttere kalt arrangementet flyt. For skjermrelaterte hendelser, ikke spilleren ikke ekspedere hendelsen direkte til målet objekt, men i stedet injiserer det på øverste nivå skjerm objekt. Scenen

Vi kan visualisere hendelsen reiser fra scenen nedover i hierarkiet til målobjektet. Dette kalles registreringsfasen.

At målet, er hendelsen i målet fasen.

Deretter arrangementet "bobler opp" tilbake til scenen. Dette er den boblende fasen.
Flash Player hendelsen flyt.

Denne imaginære tur avgjør i hvilken rekkefølge de lytter funksjonene kalles. Den useCapture parameter i addEventListener metoden heter vårt ønske om hvilken retning vi ønsker at våre funksjonen skal aktiveres: på fange vei ned (verdi: true) eller boblende vei opp (verdi: false - standard).

Det som er interessant er det faktum at arrangementet objektet som er gått som et argument for lytteren funksjoner er den samme. Så, hvis vi endre noen av sine eiendommer, lytterne lenger ned arrangementet strømmen vil få samme objekt, nå modifiseres!

I eksempelet ovenfor, da vi registrerte hackMouseListener funksjonen til å bruke registreringsfasen, vi sørget for at vi får arrangementet på sin "way down", så å si. At funksjonen vil bli kalt før listens lyttere som er registrert til målet /boblende fase på selve komponenten. Når listen kode inspiserer ctrlKey eiendommen vil det finne at det er satt til sann, noe som indikerer at brukeren trykket Ctrl-tasten.

Eller gjorde han det?



Konklusjon Anmeldelser

Du vet nå hvordan å lage en liste komponent multivalg med bare en enkel hendelse lytteren. Du kan bruke dette på andre listebaserte komponenter som Datagrid. Ikke glem å sette allowMultipleSlection eiendommen.

Enda viktigere er imidlertid at (forhåpentligvis) har du lært noe nytt om Flash hendelsen flyt, om useCapture parameter, faser event og hvordan du bruker denne fantastisk (og litt ukonvensjonelle) metode for å bøye hendelser til dine behov.

Håper du likte det. Takk for lesing!