, hvordan at tilføje mus gestus kontrol - projekter: flere slagtilfælde gestus,,,,, andel,,,,,,,, 9,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss., i første del af denne serie, jeg præsenterede en klasse at håndtere fælles mus slagtilfælde påvisning:, mgesture,.denne lektion tager et skridt videre ved at påvise en sekvens af slagtilfælde,.,, vi vil bruge den klasse, gmanager, for dette, samtidig med, mgesture,.efter mødet, gmanager, funktionalitet, en ansøgning for dets anvendelse vil blive udviklet.,, endelige resultat forpremiere, lad os tage et kig på det endelige resultat, vi arbejder hen imod.at bruge blitzen præsentation nedenfor, brug din mus til at udføre den handling, som det fremgår af den pil i øverste venstre hjørne.gestus ved at trykke på den venstre mus knap, flytte mus, mens de holder knap, og slippe den.,, trin 1: opsummere retning nummerering, første skridt, en revision af tal, der anvendes til at repræsentere forskellige retninger fra del 1.du kan forhåbentlig udgør et mentalt billede af diagrammet ovenfor, som vi skal henvise til det stærkt i denne forelæsning.,, trin 2: slag afvigelser, som bruger gør en gestus af peger anordninger (mus, tablet pen osv.), vektorer opdaget over tid rent faktisk udgør en række tal.henviser til nedenstående diagram.,,, bemærker den entydige tal i den rækkefølge, er 0, 4, 1.men jeg skal sige enestående tal er 0, 1.lad os se det i øjnene. det er svært at foretage en nøjagtig slagtilfælde på mine bambus - tablet, og endnu mere med en mus.fejl er uundgåelig.vores algoritme, bør være baseret på de høje gentagelse af tal i en ubrudt kæde.de er 0, 1 - 4, sandsynligvis på grund af unøjagtige slagtilfælde.derfor er denne gestus kan være entydigt identificeret som en sekvens af 0, 1.jeg har medtaget et par ting med ledsagende enestående sekvenser nedenfor.,,, trin 3: indførelse af gmanager, er formålet med denne klasse er enkel:,, at registrere enestående slagtilfælde sekvenser at sammenligne mod, at fange sekvens opdaget af nuværende gestus fra brugeren., at sammenligne sekvens i (2) mod alle slagtilfælde sekvenser i (1). for at vende tilbage søgning resultat.,, entreprenør har til at definere et sæt af slagtilfælde sekvenser til påvisning af i første omgang.når det er klaret, begivenhed lyttere aflæse brugernes gestus på runtime kan være programmeret.hvis den nuværende gestus er sekvens med matcher en sekvens i på forhånd definerede, forskellige operationer kan gennemføres.,, trin 4: variabler, gmanager, har følgende variabler:, variable datatype formål, gestseq, vektor. < vektor. < int > >, system til registrering af forskellige slagtilfælde 2d - sekvenser., gestname, vektor. < snor > system til registrering af navne, 1d slagtilfælde sekvenser., slagtilfælde, vektor. < int >, 1d system til registrering af begrænsning gestcurrent, er slagtilfælde sammenlignet med slagtilfælde sekvens., gestcurrent, vektor. < int >, 1d system til registrering af nuværende slagtilfælde sekvens., _order, boolean, afgør, om gestus sætter ind, gestseq, skal påvises for., ordercurrent, int, nuværende sekvens for at konstatere, om _order er tændt, begynder på 0.trin 5: metoder, der er i gmanager, er som følger: metode input /output - beskrivelse, gmanager, ugyldige eller klasse indledning, gestseq, og gestname, slagtilfælde, indledes, register, vektor. < int >, snor, int, ugyldige register slagtilfælde sekvens, navn og slagtilfælde begrænsning (frivilligt).fjern, int, eller fjerne udvalgte slagtilfælde sekvens, removeall, ugyldige eller fjerne alle registrerede slagtilfælde sekvenser, start, ugyldige tomrum forberede variabel til at registrere nuværende slagtilfælde sekvens, gestcurrent, bor, int, ugyldige befolke, gestcurrent med påvist slagtilfælde (enkeltstående), sporing, ugyldige, vektor. < int >, spor og output, gestcurrent for fejlretning., dropstrokes, vektor. < int > int, vektor. < int > fjerne unnecesary slag i gestcurrent,.hold rørledninger og diagonaler (0), og kun beholde elnettet (1), og kun beholde diagonaler (2).(del 3 yderligere vil forklare sin anvendelse.), dropduplicates, vektor. < int > int, vektor. < int >, identificere gyldigt unikt tal i løbende sekvens og smid, kopier.input mindst dobbeltprøver (bortset fra selvstændige) anses for at være gyldige slagtilfælde, checkmatch, int. int, kontrol, hvis medlem af, gestseq, tændstikker, gestcurrent,,, ugyldig, system, tilbage på grund af søgning.resultatet er, at vifte med indeks for parret, sekvens, gestseq, og dens navn, gestname, egenskaber, gmanager, er som følger:, ejendom accessor typer formål, useorder, albuer /setter får og fastsætter, hvorvidt gestseq skal påvises for længde, getter kun bliver længde af gestseq, trin 6: register på forhånd definerede slagtilfælde sekvenser, som nævnt, er det første skridt til at registrere enestående slagtilfælde sekvenser, som opføres gestus kan sammenlignes med.den pågældende initates variabler, der (fremhævet) og metoder som følge af registre og fjerner fra en foruddefineret slagtilfælde sekvenser., * * * konstruktøren om at indlede gestseq, stokes, gestname * /offentlige funktion gmanager() {gestseq = nye vektor. < vektor. < int > > gestname = ny vector. < snor > strøg = nye vektor. < int >} /* * * metode til at registrere et sæt /sekvens af gestus * @ param sekvens numeriske repræsentation af gestus sekvens * @ param identifikator navn repræsentation af gestus * @ param lov stokes lov: både (0), fire vigtigste (1), diagonaler (2) * /offentlige funktion register (sekvens: vector. < int > navn: snor, onlystrokes: int = 0): ugyldig (gestseq. tryk (sekvens); gestname.push(navn), slagtilfælde. tryk (onlystrokes)} /* * * metode til at fjerne en række gestus * @ param selectset udvalgte rækkefølge for at fjerne * /offentlige funktion fjerne (selectset: int): ugyldig (gestseq. splejsning (selectset, 1); gestname. splejsning (selectset, 1) slagtilfælde. splejsning (selectset, 1)} /* * * metode til at fjerne alle på forhånd definerede handlinger.* /offentlige funktion removeall(): ugyldig (gestseq = nye vektor. < vektor. < int > > gestname = nye vektor. < snor > strøg = nye vektor. < int >}, trin 7: egenskaber, under er de egenskaber, der specifikt for bedriften slagtilfælde seqeunces, gestseq,: /* * * ejendom for at få det samlede sæt af på forhånd definerede handlinger * /offentligheden få længde (): int {tilbage gestseq.length;} /* * * ejendom for at få aktuelle fastsættelse af på hinanden følgende gestus påvisning * /offentlige funktion bliver useorder(): boolean {tilbage _order;} /* * * ejendom for at afgøre, om der på forhånd definerede handlinger bør detekteres sekventielt * /offentlig funktion, der er fastsat useorder (værdi: boolean): ugyldig (_order = værdi), trin 8: rekord nuværende slagtilfældesekvens, efter registrering af slagtilfælde sekvenser til påvisning af mod, vi kan forberede os, gestcurrent og registrering af consequtive gyldige enestående slag i den.metoder under vil mulighed for det., sender, er en metode til at spore denne gestus er sekvens., * * * metode til at optage det nuværende sæt gestus * /offentlige funktion start(): ugyldig (gestcurrent = nye vektor. < int >} /* * * metode til at befolke gestus til nuværende gestus * @ param gesturecode gestus, der fra mgesture * /offentlige funktion befolke (gesturecode: int): ugyldig (//accepterer kun gyldig, enestående gestus (0 - 8) i den gældende rækkefølge, hvis (gesturecode > - 1) gestcurrent. tryk (gesturecode)} /* * * metode, der anvendes til fejlfinding.spor gestcurrent * /offentlige funktion tracer(): vector. < int > {tilbage gestcurrent; spor (gestcurrent)}, trin 9: undersøger, gestcurrent, nu kan vi allerede skrevet et program til at tjekke nuværende gestus er sekvens, som nævnt i punkt 2.du kan downloade kilde og se på den klasse, checkout2,.tænd for dit output - panel i flashdevelop på rækkefølgen af tal, begået af deres nuværende gestus. jeg har også omfattet en demo af det nedenfor, og der, textfield, til at vise rækkefølgen i stedet for output - panel i flashdevelop.,, trin 10: gennemførelse af checkout2, har jeg medtaget kildekode af checkout2, som vist nedenfor.er det ikke svært at forstå logikken, forudsat at du har forstået, hvordan begivenhed, som er tildelt.(læs denne lektion i at finde ud af, om tilfælde, som jeg har ligeledes fremhævet.) vigtige punkter, hvor gmanager, 's metoder er blevet anvendt, offentlige klasse checkout2 udvider sprite (private var ges: mgesture; //tilfælde af enestående gestus påvisning private var gesman: gmanager; //tilfælde af sekvens gestus detectio private var t: textfield; offentlig funktion checkout2() (//initierende mgesture at give enestående gestus påvisning ges = nye mgesture (tidspunkt); //initierende gmanager, således at følgende gestus påvisning gesman = nye gmanager(); t = nye textfield() t.x = 50; t.y = 50; t.autosize = textfieldautosize.left; addchild (t); addeventlistener fase. (mouseevent.mouse_down, start) fase. addeventlistener (mouseevent.mouse_up, slut);} privat funktion start (e: mouseevent): ugyldig (//start påvisning af enestående og sekventiel gestus ges. start(); gesman. start(); stadie. addeventlistener (mouseevent.mouse_move, tjek); //begynde at tegne gestus grafik. clear() og grafik. linestyle (3) til (mousex, grafik. mousey)} privat funktion kontrol (e: mouseevent): ugyldig (gesman. befolke (ges. evaldirections()); //foder enestående gestus til en sekvens grafik. og gratis linjetil (mousex, mousey) //tegning gestus} privat funktion (e: mouseevent): ugyldig (fase. removeeventlistener (mouseevent.mouse_move, kontrol); t.text = gesman. tracer(). tostring()}}, trin 11: rydde op, gestcurrent, unødvendige slagtilfælde, rent slag i løbendet gestus er vigtigt, da der findes:,, slagtilfælde, at vanskeliggøre påvisning af fagter., slagtilfælde, der er overlapning, slagtilfælde, der er ugyldig, har jeg delt oprensning arbejde i to faser, navnlig dropstrokes, og dropduplicates,., dropstrokes, eliminerer slag, der har gjort det vanskeligt at påvise tilkendegivelser.(dette aspekt vil blive forklaret nærmere i del 3, når vi opdager alfabetisk breve.), dropduplicates, eliminerer kopier og ugyldig, slagtilfælde,.,, dropstrokes, vil kun holde slag i gestcurrent, i henhold til den tredje paramenter, onlystrokes, i registret.det er fastsat, hvornår vi registrerer gestus sekvenser i første omgang.for yderligere forståelse, igen, se del 3.men for nu, bare hold den på nakken.In fact, this tutorial does not make use of this feature just yet., /** * Method to rid irrelevant strokes based upon condition * @param strokesCondition * @return Vector of */ private function dropStrokes(inputArray:Vector.<int>, strokesCondition:int):Vector.<int> { \tvar xDiagonals:Vector.<int> = inputArray.slice(0,inputArray.length); \t//Keep mains only \tif (strokesCondition == 1) { \t\tfor (var i:int = 0; i < xDiagonals.length; i++) { \t\t\tif (xDiagonals[i] > 3) { \t\t\t\txDiagonals.splice(i, 1); \t\t\t\ti-- \t\t\t} \t\t} \t} \telse if (strokesCondition == 2) { \t\tfor (var j:int = 0; j < xDiagonals.length; j++) { \t\t\tif (xDiagonals[j] <4) { \t\t\t\txDiagonals.splice(j, 1); \t\t\t\tj-- \t\t\t} \t\t} \t} \treturn xdiagonals}, trin 12: rydde op, gestcurrent, stjålet fra venstre til højre for at gå til den næste billede.den anden fase af rene op er at befri de to eksemplarer og ugyldig, slagtilfælde, som nævnt i punkt 2.gennemførelsen er skrevet under. jeg har stillet en flash præsentation frem for at lette deres forståelse af algoritme.gør en gestus med mus til at gå til næste billede, til venstre, til at vende tilbage til tidligere ramme.op gestus bringer dig til det endelige billede ned gestus bringer dig til den første ramme., * * * metode til at skaffe kopier og mulige fejl gestus * @ param minduplicates gentagelser anses for at være højt gentagelse * @ tilbage vektor array w /o kopier og mulige fejl gestus * /privat funktion dropduplicates (inputarray: vector. < int >, minduplicates: int = 1): vector. < int > (//både for enden af vejen indikator til heltal system var xduplicates: vector. < int > = inputarray. del (0, inputarray. længde); xduplicates. tryk (- 1); //indlede variabler var tæller: int = 1, var keepindex: int = 0; //river kopier og ugyldige trin (var - jeg: int = 0. jeg < xduplicates.length - 1; jeg + +) (hvis (xduplicate[i] = = xduplicates (i + 1]) tæller + andet (hvis (tæller > minduplicates) (xduplicates. splejsning (keepindex, regne - 1) keepindex + + i = keepindex tæller = 1} andre xduplicates. splejsning (keepindex, minduplicates) -}} xduplicates. splejsning (xduplicates.length - 1, 1) at vende tilbage xduplicates;}, trin 13: se en kamp, efter at nedbringe, gescurrent, vores næste opgave er at finde en ordentlig kamp i den række foruddefinerede gestus sekvenser.vi kan kontrollere overensstemmelse mellem nuværende gestus og medlem af på forhånd definerede handlinger med, checkmatch,.input - indeks, gestseq, du vil gerne se kampen med gestcurrent,.en tilbagevenden til værdien af - 1, indikerer ingen match; indeks, gestseq, modsvares andet., * * * metode til at kontrollere, om gestcurrent kampe med gestseq * @ param indeks, medlem af gestseq * @ returkamp (1) eller ikke (- 1) * /privat funktion checkmatch (indeks: europa.eu.int): int (//pessimistisk søgen, har ikke fundet oprindeligt var matchede: int = - 1; //rent input først var renset: vector. < int > = dropstrokes (gestcurrent, slagtilfælde (indeks); spor (renset, "xstrokes") renset = dropduplicates (renset) og spor (renset, "xduplicates") //- kun de af samme længde, hvis (cleaned.length = = gestseq [indeks]. længde) {var imod: int = cleaned.length; //rullen gennem hver heltal af udvalgte foruddefinerede gestus til (var jeg medlem:nt = 0 medlem < cleaned.length; medlem + +) (hvis (renset [medlems] = = gestseq [indeks] [medlems]) mod - - og andre brud;} //, hvis alle tal op, løbende indeks for gestseq tændstikker gestcurrent hvis (mod = = 0) matchede = indeks;} tilbage matchende;), punkt 14: produktion resultatet kan vi endelig produktion resultatet.resultatet vil være baseret på, om _order er tændt eller ej.vi tjekker overensstemmelse mellem gestcurrent med aktuelle, gestseq, kun, hvis der _order, er tændt, ellers bliver vi nødt til at undersøge overens med et medlem, gestseq,., uanset eftersøgningen resultat, vi har brug for til produktion af resultaterne.søg resultat vil være, - 1, hvis der ikke er vellykket kamp, hvis der er en match, en bred vifte af slagtilfælde indeks kombineret med navn vil blive returneret.resultatet er, at - 2, hvis gestseq, er tomme., * * * metode til at vurdere gestus i henhold til foretrukne metode (i rækkefølge eller ej) * @ forrentning på forhånd definerede handlinger (2), passer ikke til handling (- 1), system med indeks for match og dets betegnelse * /offentlig funktion end(): system (//pessimistisk ransagning, - 2, viser, at der ikke er nogen på forhånd definerede gestus var resultat: array - = - 2, "ingen foruddefinerede gestus"]; //, hvis der på forhånd definerede gestus, hvis (gestseq.length > 0) (//efter kampen, hvis (_order) (hvis (checkmatch (ordercurrent) > - 1) (resultat = [ordercurrent, gestname [ordercurrent]] ordercurrent + +) //finde en match i specifikke for andre, hvis (!_order) (//rullen gennem alle gestus til (var - jeg: int = 0. jeg < gestseq.length; jeg + +) (hvis (checkmatch (i) > - 1) (resultat = [jeg, gestname [i]]}}} //klare, når kan ikke finde andet {resultat [- = 1, "gestus er ugyldig."]}} tilbage resultat), trin 15: forberede grafisk aktiver i glimt, med trin 14. vi afsluttede, gmanager,.vi er nødt til at skabe grafisk aktiver.jeg har skabt det grafiske aktiver i flash pro og vil eksportere dem. swc format.tryk ctrl + forskydning + e12 til pop den offentliggør om vindue i flash og se "eksport swc" flash regning.jeg har lavet min aktiver downloades, men har ret til at udvikle deres egne.,,,,,, trin 16: import af aktiver i flashdevelop, bring din swc i flashdevelop, lib. folder, som vist ovenfor.skabe en klasse, der hedder "main2" i flashdevelop og instantiate den movieclip, som holder grafik.jeg har fremhævet de relevante actionscript nedenfor. private var ges: mgesture; private var gesman: gmanager; private var en: pile, private var ff: boolean = falske offentlig funktion main2() (//importerende grafik i form af movieclip a = nye arrows(); a. stop(); a.x = 50; a.y = 50; addchild (en), skridt 17: register, tilsvarende gestus, vil vi udtrykke vores gestus sekvenser i den orden, som grafik er arrangeret i vores offentliggjort movieclip.vi gør det for let nedad til stel, når resultatet er nået.bemærk også, at jeg har fremhævet linje 33 af gennemførelsen; du kan uncomment dette i min kilde fil at se ens gjort for. offentlige funktion main2() (//importerende grafik i form af movieclip a = nye arrows(); a. stop(); a.x = 50; a.y = 50; addchild (a) //initierende mgesture, således at enestående gestus påvisning ges = nye mgesture (tidspunkt); //initierende gmanager, således at følgende gestus påvisning gesman = nye gmanager(); //this.seq = sandt; //påvisning af bevægelser i rækkefølge, hvis (ff) (a.gotoandstop (2); gesman.useseq = sandt.} //register gestus sekvenser i overensstemmelse med stel //register gestus sekvenser i overensstemmelse med stel gesman. register (< int > [2, 1] "2, str.oke Down, CCW"); \tgesMan.register(new < int > [1, 0], "2 Stroke Right, CCW"); \tgesMan.register(new < int > [0, 3], "2 Stroke Up, CCW"); \tgesMan.register(new < int > [3, 2], "2 Stroke Left, CCW"); \tgesMan.register(new < int > [3, 2, 1], "3 Stroke Down, CCW"); \tgesMan.register(new < int > [2, 1, 0], "3 Stroke Right, CCW"); \tgesMan.register(new < int > [1, 0, 3], "3 Stroke Up, CCW"); \tgesMan.register(new < int > [0, 3, 2], "3 Stroke Left, CCW"); \t \tgesMan.register(new < int > [3, 0], "2 Stroke Right, CW"); \tgesMan.register(new < int > [0, 1], "2 Stroke Down, CW"); \tgesMan.register(new < int > [1, 2], "2 Stroke Left, CW"); \tgesMan.register(new < int > [2, 3], "2 Stroke Up, CW"); \tgesMan.register(new < int > [2, 3, 0], "3 Stroke Right, CW"); \tgesMan.register(new < int > [3, 0, 1], "3 Stroke Down, CW"); \tgesMan.register(new < int > [0, 1, 2], "3 Stroke Left, CW"); \tgesMan.register(new < int > [1, 2, 3], "3 Stroke Up, CW"); \t \tgesMan.register(new < int > [0, 3, 0, 3, 0],"Step Up"); \tgesMan.register(new < int > [0, 1, 0, 1, 0], "Step Down"); \tgesMan.register(new < int > [4], "South East"); \tgesMan.register(new < int > [5], "South West"); \tgesMan.register(new < int > [6], "North West"); \tgesMan.register(new < int > [7], "North East"); \tgesMan.register(new < int > [4, 5, 4, 5], "Zigzag"); \t \tstage.addEventListener(MouseEvent.MOUse_down, start) fase. addeventlistener (mouseevent.mouse_up, slut);}, gå 18: håndtering af resultater, registrering af gestus sekvens følger samme fremgangsmåde som, checkout2,.jeg formoder, der er gået igennem skridt 10.så vi skal produktionen resultatet.efter en vellykket kamp (> - 1), kan vi rulle den passende ramme.igen, dette er genstand for, om de har gjort brug af sekvens ved at dreje på, ff, eller ikke, privat funktion (e: mouseevent): ugyldig (fase. removeeventlistener (mouseevent.mouse_move, tjek); //evaluere gestus og output var produktionen: array = gesman. end(), hvis produktion [0] > - 1) (hvis (ff) a. nextframe(); andre a.gotoandstop (produktion [0] + 2); //kompensere for første billede er tomme.}}, skridt 19: offentliggør deres projekt, tryk ctrl + træde til at offentliggøre deres projekt.gestus med musen, og det blev opdaget.jeg har både omfattede projekter (et krav, at du svarer til en given gestus; den anden viser den gestus, du gjorde, hvis det passer det ved).hav det sjovt, gå 20: udvikling af anvendelsen, unøjagtigheder i bruger gestus er fælles, og enhver ansøgning, der omfatter handlinger bør overveje dette.i næste del af denne lektion, jeg vil forsøge at bruge, mgesture, og gmanager, til at udvikle et alfabet anerkendelse anvendelse.jeg vil pege på flere detaljer at presse i overensstemmelse hermed for at forbedre gestus afsløring, konklusion bør de nu finder det let at udarbejde ansøgninger, at påvise gestus sekvenser af en kombination.håber det pædagogiske har hjulpet dig, på en måde.lad mig vide, af deres bemærkninger, forespørgsler og insekter er stødt på.- tak.
hvordan at tilføje mus gestus kontrol - projekter: flere
Previous:let at skabe ny