Build en GPS Speedometer: Brukergrensesnitt og polsk
Del
Del
Del
Del
Denne Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I løpet av den første delen på Mobiletuts +, dekket vi grunnleggende AIR for Android utvikling og også fått på plass det grunnleggende for vår speedometer app ved hjelp av GPS-støtte for å bestemme vår nåværende hastighet.
Nå skal vi legge den siste finpussen til app ved å bygge sitt brukergrensesnitt, og også legge koden for å tillate appen å opprettholde sin status.
Sjekk ut første del av denne opplæringen Bygg en GPS Speedometer: Komme inn AIR for Android over på vår søsterside Mobiletuts +
Trinn 1: Working FLA
Launch Flash Professional CS5 og åpne FLA du var jobbe med fra Part 1.
kunstverk som kreves for denne opplæringen ble gitt i del 1 i kilde /speedometer-artwork.fla Bekreft dette ved å sjekke at FLA bibliotek ser slik ut:. Hvis biblioteket ikke inneholder skisser deretter kopiere den fra kilde /speedometer-artwork.fla Foreløpig UI består av to dynamiske tekstfelt - ett som viser din nåværende hastighet i meter per sekund, den andre i miles per time Bruk av kunstverk fra biblioteket la oss nå lage et speedometer ring som vi kan bruke til å erstatte disse tekstfeltene Innenfor Opprett ny Symbol panel, navngi symbolet 'Speedometer "og sikre at denne typen er satt til' Movie Clip ':. Klikk OK Fra Flash IDE kan du nå direkte redigere filmklipp som du har laget navn din tidslinje lag "Meter Bakgrunn ':.. Innen biblioteket, utvide 'Bakgrunn' mappen og dra 'meter background.png "til scenen Fra Properties Inspector panel, sette klippets x og y-verdier til" 0 ". Bor innen tidslinjen for 'Speedometer', legger et nytt lag og gi den navnet "Arrow": Innen biblioteket, utvide "Arrow" -mappen og dra den "Arrow" filmklipp på scenen. Sørg for at du drar den ut mot lag som heter "Arrow". Fra Properties Inspector panel, sette klippets x-verdien til 239 og sin y-verdien til 273. navn forekomsten 'pil' innenfor Eiendom Inspector panel. Med klippet fortsatt markert, velger Free Transform Tool (Q) fra Verktøy-bar. En markeringsramme vises rundt klippet med utgangspunktet vises som en hvit sirkel i midten: Flytt klippets utgangspunktet til bunnen-senter på markeringsrammen: flytte tilbake til roten tidslinje Vi kan nå fjerne tekstfeltene som tidligere representerte UI Klikk på den Selection Tool (V) fra Verktøy-bar og individuelt velge og slette hver av tekstfeltene fra scenen. Også fjerne eventuelle innebygde skrifter i biblioteket som kan ha vært forbundet med tekstfeltene. Dra fra biblioteket til scenen, den "Speedometer 'filmklipp du opprettet i trinn 3. Navn klippets eksempel" speedometer "og plasser den på (0, 81). Endre navn på tidslinjen lag som klippet er å sitte på å "Speedometer ' root tidslinje etappe skal nå se slik ut:. Lagre FLA Vi trenger også å gjenspeile disse endringene i dokumentet klassen Åpne Application.as og ta ut følgende to medlems variabeldeklarasjoner: Du må også fjerne referanser til disse variablene fra handleGeolocationUpdate () -metoden. Fjern de følgende to linjer: Du kan også fjerne import uttalelsen brukes for tekstfeltene: Til slutt legger du til et nytt medlem variabel som refererer den nye speedometer filmklipp eksempel som sitter på scenen: Vi vil komme tilbake til Application.as når vi har skrevet en klasse som representerer speedometer Opprett en ny klasse og legg følgende til det: Lagre klassen som Speedometer.as. Flytt til biblioteket og høyreklikk på Speedometer klippet og velger Egenskaper ... Klikk på OK for å begå endringene. Den Speedometer klassen vil nå være knyttet til Speedometer filmklipp i biblioteket. Klassen har ett medlem variabel kalt pilen, som har en referanse til filmklipp eksempel som representerer speedometer sin nål. Speedometer klasse offentlige API består av en enkelt eiendom som heter fart, som aksepterer en hastighet målt i meter pr sekund. Du kan se den metoden som håndterer dette her: I hovedsak, konverterer fremgangsmåte hastigheten fra meter per sekund i miles pr time før beregning av rotasjonsvinkelen som skal anvendes på nålen for å gjøre den peker til den korrekte stilling på speedometeret. Klassen har også to private metoder som hjelper den å gjøre dette - convertToMilesPerHour () og convertToRotation () La oss gå tilbake til Application.as Legg til følgende linje med kode til handleGeolocationUpdate () metode: Dette vil tvinge speedometer til oppdatere hver gang nye GPS-data er tilgjengelig Lagre Application.as Ok nå er vi i en posisjon å teste det vi har for øyeblikket. Hvis du tester direkte på en Android-enhet og stole på sin GPS-enhet og velg deretter "Ekte" publisere profil som vi satt opp i del 1, og også huske å aktivere GPS sensor. Hvis du tester på skrivebordet eller på en Android-enhet uten å stole på sin GPS-enhet og velg deretter "Simulate" publisere profil Hvis du tester innen Flash Professional velger du Control. | Test Movie | i Flash Professional. Hvis du tester på en Android-enhet velger du Fil | Publish (Alt + Shift + F12) Også, hvis du bygger en AIR for Android app for første gang i dag vil du bli presentert med Application &.; Installer innstillingspanelet når du forsøker å publisere: Du må taste inn passordet du tilknyttet sertifikatet fra Part 1. Velg også "Husk passord for denne økten" boksen for å forhindre dette panelet vises hver gang du forsøker å publisere og distribuere til din Android-telefon. Vi er absolutt et skritt nærmere, men det er ting som fortsatt må tas opp. Trolig den mest åpenbare er at speedometer er nålen ikke jevnt reise mellom hastigheter. I stedet hopper til hvert mål hastighet ved mottak oppdaterte data fra enhetens GPS-enheten. Dernest, ikke speedometer ikke har en fungerende kjørelengde teller. Vi skal fikse begge disse problemene snart, men først la oss se på noen optimalisering teknikker som vil gagne apps som kjører på mobilen. Når man utvikler for mobil, optimalisering og ytelse bør være en viktig faktor. Det er et par ting vi kan gjøre for Speedometer klassen til hjelp ytelse på mobil Legg til følgende to linjer med kode til handleAddedToStage () metode innen Speedometer.as. Siden det ikke er nødvendig, deaktiver vi mus samhandling innenfor speedometeret ved å sette både mouseEnabled og mouseChildren egenskaper til falsk Dette er god praksis når du skriver mobile applikasjoner og selv om det ikke vil gi noen synlig fordel i en app så trivielt som denne, kan gevinsten være betydelig i prosjekter som har dypt nestede visningslister hvor hendelsen boblende kan forårsake ytelsesproblemer. Bor i handleAddedToStage ( ) -metoden legge til følgende to linjer med kode: Igjen primært hjelp ytelse på mobile enheter, vi også cache nålen sin filmklipp på enhetens GPU med både cacheAsBitmap og cacheAsBitmapMatrix egenskaper GPU caching tvinger en bitmap versjon. av en skjerm objekt som skal sendes til enhetens graphics processing unit der det kan bli trukket til skjermen mye raskere. Ved å sette en skjerm objektets cacheAsBitmap eiendom til sann du oppgi til Flash runtime at du ønsker en bitmap representasjon av det objekt som skal lagres på GPU. Den bitmap vil holde seg på GPU til displayet objektet det representerer endringer, hvorpå en ny bitmap er opprettet for skjermobjekt og sendt til GPU. For GPU caching å være effektive du trenger å minimere antall av ganger din skjerm objektet endres. Endre objektets x eller y posisjon er greit siden de lagrede bitmap data kan fortsatt brukes, men flytter spillehodet innenfor skjermen objekt eller rotere det vil oppheve den bufrede versjonen, og tvinger en ny bitmap å bli gjengitt og lastet opp til GPU. Denne prosessen er dyre og har visningsobjekter som kontinuerlig må re-bufret faktisk vil hemme ytelsen heller enn å forbedre den. Med tanke på speedometeret sin nål stadig blir rotert spør du kanskje hvorfor vi bry caching det. Tross alt, ikke det tvinge pilen filmklipp å være konstant re-bufret? Det korte svaret er ja hvis vi bare hadde satt den cacheAsBitmap eiendom til sann. Men en ekstra eiendom - cacheAsBitmapMatrix - ble også innstilt. Dette hotellet tillater flere grafiske operasjoner som skal utføres på GPU som rotasjon. I andre ord, ved å sette både cacheAsBitmap og cacheAsBitmapMatrix kan du tvinge et bitmap representasjon av vårt speedometer er nål for å bli lastet opp til GPU og også har GPU rotere at bufret bitmap hver gang nålen roteres ved vår kode Til slutt legger du til følgende import uttalelse til din klasse. GPU caching er en kraftfull teknikk og gir betydelige ytelsesfordeler løpet bitmap caching, men det må brukes med forsiktighet - det er ikke ideelt for alt, og feil bruk kan lamme appen Forestillingen gevinster er ikke sannsynlig å bli sett i dette programmet, men denne lille introduksjon til GPU caching bør komme til nytte i mange av dine fremtidige mobilprosjekter. Lagre Speedometer.as. Adobe AIR for Android gir to gjengi moduser som kan brukes ved kjøring. Hittil har vi brukt CPU gjengi modus, noe som tvinger alle grafikkgjengivelse skal finne sted på CPU. For å dra nytte av på enheten GPU må du spesielt satt appen til å bruke GPU gjengi modus La oss gjøre det nå Innenfor Flash IDE velge Fil.. | AIR Android Innstillinger ... for å få opp Application & Installer innstillingspanelet: Pass på at kategorien Generelt er valgt. Bruke rullegardinmenyen, sette 'Render mode' feltet til "GPU". Nå Klikk OK. Ved hjelp profil 'Simulate ", publisere og distribuere denne nyeste versjonen på din . Android-enhet Du husker kanskje fra del 1 at GPS-mottakere er ikke alltid nøyaktig betyr at dataene du mottar fra telefonens Sensoren kan ikke alltid være korrekt. Selv testdata jeg gitt for GeolocationSimulate klassen inneholdt feil. Det bør forventes at de data som kommer fra GPS-mottakeren kan noen ganger være feil og du bør skrive kode for å håndtere dette, spesielt pigger som kan gjøre din applikasjonen oppfører seg på en merkelig måte Her er verdiene for de første femten sekundene av data utgang fra GeolocationSimulate. 2, 128, 5, 6, 128, 7, 128, 7, 128, 8, 6, 5, 128, 7, 9 Som du ser er det flere rare glitches som forårsaker mottakeren for å rapportere at du reiser på 128 meter per sekund. Vi ønsker å fange disse toppene og hindre dem viser i speedometer app. Vi tar en noe forenklet tilnærming innenfor vår app. Vi skal prøve å begrense toppene ved å sette en øvre grense for økningen i meter per sekund på at vi kan reise på. Noe høyere enn denne verdien vil bli ignorert Først innen Speedometer.as, legge til følgende konstant: Vi trenger også et medlem variabel å huske den hastigheten du kjører i. Legg til følgende linje i klassen: La oss initial som medlem variabel i konstruktøren: Nå er alt som gjenstår å gjøre er å legge noen kode for å avgjøre om du vil bruke den nyeste hastighet eller å fortsette å bruke den tidligere innspilt hastighet hvis den nyeste fart anses ugyldig. Legg til følgende linjer: Merk også at vi har endret følgende linje innen metoden fra: til: Lagre Speedometer.as Det har tatt seg av eventuelle feilaktige data. Nå kan du bygge og teste den nyeste versjonen av appen. Du bør legge merke til at nålen ikke lenger hopper når data piggene er oppstått Som nevnt tidligere, hopper speedometeret er nål til verdier i stedet for jevnt .. flytte mellom dem La oss rette på dette ved hjelp GreenSock sin TweenLite tweening motor Legg til følgende import til Speedometer Klasse: Nå innen innstilt hastighet () metoden erstatte følgende linje: med dette: Denne nye kodelinje initierer en animasjon på pilen filmklipp eksempel som finner sted over en periode på ett sekund. I løpet av den perioden, pilen eksempel rotasjon eiendoms jevnt overganger fra sin nåværende verdi til den nye verdien beregnes ved convertToRotation (). Lagre Speedometer.as. Selvfølgelig må vi faktisk laste ned TweenLite SDK og sette opp Flash Professional CS5 til å bruke den. La oss gjøre det i neste trinn Åpne en nettleser og gå til TweenLite side på GreenSock site: http: //www. greensock.com/tweenlite/ På høyre side av siden er en "Last ned AS3" -knappen. Klikk på den og laste ned zip-fil. Når lastet ned, kopiere zip-filen til skrivebordet ditt For desktop, her hvor du skal kopiere zip-filen til. Pakk ut alle filene og slette den opprinnelige zip-filen Innen Flash Professional CS5 velge Fil. | Publish Settings .... Innenfor Publish Settings panel velg "Simulate" publisere profil og velg "Flash" tab: Klikk på knappen Innstillinger ... helt til høyre av Script feltet. Den avanserte Actionscript 3.0 innstillingspanelet vises. Forsikre deg om at 'Kilde banen kategorien er valgt: Klikk på "Legg til New Path' knappen innenfor" Source path 'ruten (Pluss-knappen). Nå klikker du på "Bla til Path 'knappen. Bla til greensock-AS3 Hvis vellykket din Avansert Actionscript 3.0 innstillingspanelet skal se omtrent slik ut: Klikk OK å begå endringene. Nå endres til "Ekte" publisere profil og legge biblioteket vei til sin Actionscript 3.0 Innstillinger også. Pass på at begge profilene lykkes bygge. Speedometeret er nålen skal nå flytte jevnt til målet hastighet. Du kan finne API Dokumentasjon for TweenLite og GreenSock øvrige tweening motorer på http://www.greensock.com/as/docs/tween/. Du kan også finne interaktive eksempler og eksempelkode for TweenLite på http://www.greensock.com/timelinelite/ Vi er nå i posisjon til å starte arbeidet med speedometeret kjørelengde teller. Vår app vil spore den totale distansen du har reist og vil oppdatere kilometertelleren for å reflektere dette. Her er hvordan kjørelengde telleren vil se: Vi ønsker sifrene i skranken til jevnt rulle mellom verdier. For å se dette i aksjon ta en titt på forhåndsvisnings SWF vist i starten av denne opplæringen. Hver gang en ekstra mil er krittet opp vil du se tallene i telleren farten. Vår disken består av åtte sifre, og vi vil starte med å skrive en klasse som representerer et ensifret. Hvis du vil spare deg for den innsatsen du vil finne et filmklipp i biblioteket ditt som heter "Digit". Du finner det innenfor "Counter-mappen. Dobbeltklikk "Digit" for å flytte inn i sin tidslinje. Sitter på tidslinjen er et filmklipp eksempel heter 'kolonne'. Denne filmsnutten inneholder de enkelte punktgrafikk som representerer hvert av numrene som brukes av siffer. Bare én av disse tallene vil etter hvert være synlig til enhver tid via en maske Det kan i utgangspunktet virke merkelig, men kolonnen faktisk inneholder hvert nummer to ganger -. 0 til 9 og 0 til 9 igjen. Dette duplisering tillater oss å effektivt simulere sifret rulle rundt, for eksempel fra 9 til 0. I diagrammet nedenfor skal illustrere dette sammen med et par andre scenarier: I diagrammet ovenfor, den røde firkanten representerer området av "Digit" filmklipp som faktisk vil være synlig for brukeren. For å vise brukeren et annet nummer, den 'kolonne' eksempel vil bli rullet oppover -. Masken området vil alltid forbli på samme sted Det første eksemplet ovenfor viser en bevegelse fra tallet "0" til 4-tallet. Som du kan se, bruker vi bare den øverste halvdelen av kolonnen for dette - vi aldri flytte til de gjentatte tallene i den nederste halvdelen. Det samme gjelder også for det andre eksemplet hvor vi beveger oss fra antall '5' til antall "9". Det tredje eksemplet er imidlertid annerledes. Det viser sifret flytte fra antall '5' til antall '3'. Denne gang vi beveger oss fra tallene i den øvre halvdel av kolonnen til de like tall i den nedre halvdel av kolonnen. Det samme gjelder også for den siste eksempel, hvor vi beveger oss fra tallet "9" til antall "0". I hovedsak flytter fra et lavere tall til et høyere tall vil alltid foregå helt innenfor øvre halvdel av kolonnen. Men for å gi illusjon av å rulle tilbake rundt fra et høyere tall til et lavere tall må vi alltid flytte fra den øvre halvdel av kolonnen til en av de dupliserte tallene i nederste halvdel. La oss faktisk skrive den klassen som er forbundet med og styrer 'Digit' filmklipp Opprett en ny klasse og legg følgende til det. Lagre klassen som Digit.as. Digit klasse offentlige API består av en enkelt eiendom som heter verdi. Ved å sette denne egenskapen, vil sifret bla til den verdien. Det er ett unntak fra dette likevel. Hvis verdien eiendommen blir satt for første gang da klassen vil bare plassere siffer om denne verdien i stedet for å bla til det. Dette gjør at sifret å bli satt i en innledende standardposisjon første gang sin verdi eiendommen ligger. Ta en titt på import uttalelser i klassen. Du vil se at denne klassen, som Speedometer klassen, utnyttet TweenLite API: Men så vel som å bruke TweenLite klasse vi også importere en av de TweenLite lettelser klasser navngitte Linear, som vil bli brukt til å definere hvordan kolonne med tall innenfor "Digit" filmklipp er tweened Tre medlem variabler brukes innen Digit.as.: Den første - Kolonnen - rett og slett har en referanse eksempel kolonnen som sitter på den "Digit" filmklipp tidslinje til. De andre to medlem variabler - currval og PREVVAL - brukes til å lagre gjeldende verdi at sifferet representerer og den forrige verdien det representert Klassen har to konstanter erklærte at angi bredden og høyden på hver av de. numeriske verdier innenfor "Digit" filmklipp: Disse konstantene blir brukt i ulike steder i hele klassen, den første er innenfor konstruktør: Som nevnt tidligere, vil bare én verdi vises til enhver tid innenfor "Digit" filmklipp. Dette kan oppnås ved å tegne en maske i "Digit" filmklipp tidslinje, men masker er CPU intensive og anbefales ikke for mobile enheter. En alternativ tilnærming til å skape en maske er å sette en skjerm objektets scrollRect eiendom. De DIGIT_WIDTH og DIGIT_HEIGHT konstanter brukes her til å definere en rektangulær region som sitter over det første sifferet i filmklipp kolonne. I tillegg innenfor konstruktøren både currval og PREVVAL er misligholdt til -1, noe som indikerer at en verdi har ennå ikke er satt for sifret via sin verdi eiendom Nå la oss se på den metoden som gjør at innstillingen av verdien boligen. Annet enn å sette den nye verdien og lagrer den forrige verdien bestemmer denne metoden om å rulle 'kolonne' eksempel er filmklipp til den nye verdien eller om det skal festes til det. Husk, når verdien er satt for første gang vi rett og slett ønsker å plassere 'kolonne' eksempel ved at verdien snarere enn å rulle. Det mest kompliserte metode innen denne klassen er moveColumn (), som er ansvarlig for å skyve den "kolonne" eksempel for å vise den korrekte verdi for brukeren. Metoden er godt kommentert og er vist nedenfor: For de som krever nærmere forklaring, her er noen pseudo-kode som skal gjøre ting klarere}: Alt som gjenstår å gjøre nå er knytte klassen til "Digit" filmklipp i biblioteket. Høyreklikk på "Digit" filmklipp i biblioteket og velg Egenskaper ... å ta opp Symbol dialogboksen Egenskaper I dialogboksen, klikk på "Export for Action 'boksen og skriv" Digit "inn i Class-feltet. Klikk OK og lagre din FLA <. br> Nå er det på tide å teste Digit klasse og sikre at det fungerer som forventet Vi kommer nærmere å fullføre kilometerteller, men før vi går videre la oss teste Digit klassen og se den i aksjon. Vi bruker Application klassen for rask test. Først drar en forekomst av ' Digit 'filmklipp fra biblioteket på roten tidslinjen. Navn forekomsten 'tallet' og plasserer den på scenen på (158, 449): Innen Application.as, legge til følgende medlem variabel referanse til 'tallet' filmklipp eksempel: Nå, la oss gi den sifret et standardverdien ved å legge til følgende linje på slutten av Application klassens konstruktør: Lagre klassen Publiser og teste dette på skrivebordet ved å velge Control | Test Movie | i Flash Professional.
, som ble brukt som utgangspunkt. Arbeids FLA bør derfor inneholde de samme kunstverk i sitt bibliotek
, som ble gitt i del 1.
Trinn 2: Speedometer UI
<.. p> Velg Sett inn | New Symbol ... (Ctrl + F8)
< h2> Trinn 3: Legge til Needle
Trinn 4:.. Skifte Midlertidig UI
Trinn 5.: Oppdatere Document Class
offentlig Var metresPerSecond. Textfield; offentlig Var milesPerHour: Textfield;
privat funksjon handleGeolocationUpdate (e: GeolocationEvent): void {metresPerSecond.text = String (Math.round (e.speed)); milesPerHour.text = String (Math.round (convertToMilesPerHour (e.speed)));}
import flash.events.KeyboardEvent; import flash.text .TextField, import flash.ui.Keyboard;
offentlig Var speedometer: Speedometer, private Var geolocation: IGeolocation; < . p> Lagre Application.as
Trinn 6:. Speedometer Class
pakke {import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; public class Speedometer strekker Sprite {/* konstanter * /statisk privat konst SPEED_CONVERSION_BASE: Number = 2,2369362920544; statisk privat konst ROTATION_CONVERSION_BASE: Number = 1,671428571; statisk privat konst START_ROTATION: Number = -117 /* Medlem variabler * /public Var pil: MovieClip; /* Klasse Metoder * /public funksjon Speedometer () {addEventListener (Event.ADDED_TO_STAGE, handleAddedToStage); } Offentlig funksjon innstilt hastighet (metresPerSecond: Number): void {var milesPerHour: Number = convertToMilesPerHour (metresPerSecond); arrow.rotation = convertToRotation (milesPerHour); } Private funksjon handleAddedToStage (e: Hendelses): void {removeEventListener (Event.ADDED_TO_STAGE, handleAddedToStage); arrow.rotation = START_ROTATION; } Private funksjon convertToRotation (milesPerHour): Antall {return START_ROTATION + (milesPerHour * ROTATION_CONVERSION_BASE); } Private funksjon convertToMilesPerHour (metresPerSecond: Number): Antall {return metresPerSecond * SPEED_CONVERSION_BASE; }}}
. Innenfor Symbol Properties panel, utvide "Avansert" -delen. Klikk på "Export for Action 'boksen og sette Class-feltet til' Speedometer ':
< p> handleAddedToStage () metoden blir kalt når speedometeret er ADDED_TO_STAGE hendelsen utløses. I øyeblikket er metoden bare roterer pilen filmklipp eksempel slik at det er i utgangspunktet peker på 0 miles per time på speedometeret.
offentlig funksjon innstilt hastighet (metresPerSecond: Number): void {var milesPerHour: Number = convertToMilesPerHour (metresPerSecond); arrow.rotation = convertToRotation (milesPerHour);}
Trinn 7:.. Oppdatere Speedometer
privat funksjon handleGeolocationUpdate (e: GeolocationEvent): void {speedometer.speed = e.speed;}
Trinn 8:.. Testing Vi har følgende
< h2> Trinn 9: Forbedre resultater på Mobile
Privat funksjon handleAddedToStage (e : Hendelses): void {removeEventListener (Event.ADDED_TO_STAGE, handleAddedToStage); mouseEnabled = false; mouseChildren = false; arrow.rotation = START_ROTATION;.}
privat funksjon handleAddedToStage (e: Hendelses): void {removeEventListener (Event.ADDED_TO_STAGE, handleAddedToStage); mouseEnabled = false; mouseChildren = false; arrow.cacheAsBitmap = true; arrow.cacheAsBitmapMatrix = new Matrix (); arrow.rotation = START_ROTATION;}
import flash.events.Event; import flash.geom.Matrix;.
Trinn 10: Stille GPU Render Mode
Trinn 11: Håndtere feil i GPS-data
statisk privat konst START_ROTATION: Number = -117static privat konst MAX_SPEED_INCREASE. Number = 20;
offentlig Var pil: MovieClip; private Var currMetresPerSecond: Number;
offentlig funksjon Speedometer () {currMetresPerSecond = 0; addEventListener (Event.ADDED_TO_STAGE, handleAddedToStage);}
offentlig funksjon innstilt hastighet (metresPerSecond: Number): void {//Hindre geolocation feil fra å bli brukt. if (Math.abs (currMetresPerSecond - metresPerSecond) < MAX_SPEED_INCREASE) {currMetresPerSecond = metresPerSecond; } Var milesPerHour: Number = convertToMilesPerHour (currMetresPerSecond); arrow.rotation = convertToRotation (milesPerHour);}
Var milesPerHour: Number = convertToMilesPerHour (metresPerSecond);
Var milesPerHour. Number = convertToMilesPerHour (currMetresPerSecond);
Trinn 12:. Animere Needle
import flash.geom.Matrix, import com.greensock. TweenLite;
arrow.rotation = convertToRotation (milesPerHour);
TweenLite.to (pil, en, {rotasjon: convertToRotation (milesPerHour)});
Trinn 13:. Installere Greensock Tweenlite
\\ Desktop
Windows XP: C: \\ Documents and Settings \\ brukernavnet_ditt
\\ Desktop
Mac OS X: Macintosh HD /Users / brukernavnet_ditt Twitter /Desktop
mappen som inneholder sub-mappe som heter' no '. Hvis du pakket ut zip-filen til skrivebordet og banen skal være:
Windows Vista og Windows 7: C: \\ Users \\ brukernavnet_ditt
\\ Desktop \\ greensock-AS3 \\ greensock -as3 \\
Windows XP: C: \\ Documents and Settings \\ brukernavnet_ditt
\\ Desktop \\ greensock-AS3 \\ greensock-AS3 \\
Mac OS X: Macintosh HD /Brukere / brukernavnet_ditt Twitter /Desktop /greensock-AS3 /greensock-AS3 /
< p> Velg riktig profil og teste din siste versjonen av koden enten på skrivebordet eller på en enhet.
Trinn 14:. Starte Kilometerteller
Trinn 15: Digit Movie Clip
Trinn 16: The Digit Class
pakke {import flash.display.MovieClip; import flash.events.Event; import flash.geom.Rectangle; import com.greensock.TweenLite; import com.greensock.easing.Linear; public class Digit strekker MovieClip {statisk privat konst DIGIT_HEIGHT: uint = 25; statisk privat konst DIGIT_WIDTH: uint = 23; offentlig Var kolonne: MovieClip; private Var currval: int; private Var PREVVAL: int; offentlig funksjon Digit () {currval = 1; PREVVAL = 1; scrollRect = new rektangel (0, 0, DIGIT_WIDTH, DIGIT_HEIGHT); } Offentlig funksjon innstilt verdi (verdi: int): void {//Sett sifret verdi. PREVVAL = currval; currval = verdi% 10; //Hvis det er første gang så snapper til verdien. //Ellers flytte til verdien. if (PREVVAL == -1) {snapColumn (); } Else {moveColumn (); }} Offentlig funksjon får valuta (): int {return currval; } Private funksjon snapColumn (): void {column.y = -currVal * DIGIT_HEIGHT; } Private funksjon moveColumn (): void {//Stopp kolonne fra animere. TweenLite.killTweensOf (kolonne); //Sikre at vi starter fra øvre halvdel av kolonnen. if (column.y < - (DIGIT_HEIGHT * 10)) {column.y + = (DIGIT_HEIGHT * 10); } //Finn ut hvor mange vi er i dag stoppet på. Var valStoppedAt: int = Math.abs (column.y /DIGIT_HEIGHT); //Beregn y-posisjon kolonnen må flyttes til å //vise den nye dagens antall. Var targY: Number = -currVal * DIGIT_HEIGHT; //Hvis den nye nåværende verdien er mindre enn verdien vi stoppet på //da må vi simulere sifret innpakning tilbake rundt. For å gjøre //dette, vil vi rulle inn i bunnen halvparten av kolonnen. if (currval < valStoppedAt) {targY - = (DIGIT_HEIGHT * 10); } //Utfør selve rulle animasjon på kolonnen. Var varighet: uint = Math.abs (column.y - targY) /DIGIT_HEIGHT; TweenLite.to (kolonne, varighet, {y: targY, letthet: Linear.easeNone}); }}}
import com.greensock.TweenLite, import com.greensock.easing.Linear;
offentlig Var kolonne: MovieClip; private Var currval: int; private Var PREVVAL: int;
statisk privat konst DIGIT_HEIGHT: uint = 25; statisk privat konst DIGIT_WIDTH: uint = 23;
offentlig funksjon Digit () {currval = 1; PREVVAL = 1; scrollRect = new rektangel (0, 0, DIGIT_WIDTH, DIGIT_HEIGHT);}
offentlig funksjon innstilt verdi (verdi: int): void {//Sett sifret verdi. PREVVAL = currval; currval = verdi% 10; //Hvis det er første gang så snapper til verdien. //Ellers flytte til verdien. if (PREVVAL == -1) {snapColumn (); } Else {moveColumn (); }}
privat funksjon moveColumn (): void {//Stopp kolonne fra animere. TweenLite.killTweensOf (kolonne); //Sikre at vi starter fra øvre halvdel av kolonnen. if (column.y < - (DIGIT_HEIGHT * 10)) {column.y + = (DIGIT_HEIGHT * 10); } //Finn ut hvor mange vi er i dag stoppet på. Var valStoppedAt: int = Math.abs (column.y /DIGIT_HEIGHT); //Beregn y-posisjon kolonnen må flyttes til å //vise den nye dagens antall. Var targY: Number = -currVal * DIGIT_HEIGHT; //Hvis den nye nåværende verdien er mindre enn verdien vi stoppet på //da må vi simulere sifret innpakning tilbake rundt. For å gjøre //dette, vil vi rulle inn i bunnen halvparten av kolonnen. if (currval < valStoppedAt) {targY - = (DIGIT_HEIGHT * 10); } //Utfør selve rulle animasjon på kolonnen. Var varighet: uint = Math.abs (column.y - targY) /DIGIT_HEIGHT; TweenLite.to (kolonne, varighet, {y: targY, lette: Linear.easeNone});
Hvis 'kolonne' ruller til en posisjon, stoppe det.
Hvis du på en verdi i nedre halvdel av kolonnen "og deretter hoppe til samme verdi i øvre halvdel.
< li> Beregn målet y-posisjon kolonnen "må flyttes til for å avsløre den nåværende verdien i den øverste halvdel av kolonnen.
Hvis den nåværende verdien er mindre enn den forrige verdien deretter justere målet y-posisjon for å sikre at vi bla til samme verdi i de nederste halvdel.
Bruk TweenLite, utløse rulle animasjon til målet y-posisjon.
Trinn 17:. Teste en Digit
offentlig Var siffer: Digit; offentlig Var speedometer: Speedometer, private Var geolocation: IGeolocation;
geolocation.setRequestedUpdateInterval (1000 ); geolocation.addEventListener (GeolocationEvent.UPDATE, handleGeolocationUpdate); digit.value = 6;.