AS3 101: Loops

AS3 101: Loops - Basix
5
Del
to
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter AS3 101.AS3 101:. Arrays - BasixAS3 101: Display List - Basix

Velkommen tilbake til AS3 101, den femte utgaven! På dette punktet, bør du være komfortabel med begrepene variabler, funksjoner conditionals (forgrening), og Arrays. Ikke bare bør du være komfortabel med begreper, men du bør også være flytende i hvordan Actionscript 3 implementerer disse konseptene.

For denne femte episoden, vil vi legge til at katalog av ferdigheter de ulike looping strukturer funnet i AS3. Du vil finne noen avhengigheter på informasjonen du har fått i AS3 101 Del 4, på Arrays, så hvis du har hoppet over at en eller trenger en oppfriskning, kan du se at opplæringen før du fortsetter med denne.

For vår endelige prosjektet, vil vi kombinere looper og matriser, for å gjøre en enkel shoot-em-up spill




Trinn 1:.? Hva er en Loop

Hvis du noen gang har engasjert den "repeat play" funksjonen på din CD-spiller, MP3-spiller, eller music management software, har du opplevd en loop. Hvis du noensinne har hatt å skrive linjer på kritt styret etter skolen, har du opplevd en loop. Hvis du noen gang har sett "Groundhog Day", du har vært vitne til en loop.

En sløyfe i programmering er en styreblokk, ligner i hovedsak til en hvis setningen eller en funksjon, i at det er litt av kode som ligger mellom klammeparentes, og at blokken er kontrollert av noen form for kontroll struktur. I dette tilfellet gjør at kontrollen blokken som skal utføres om og om igjen, mest sannsynlig med små variasjoner, før det er beskjed om å stoppe.

Det er tre typer sløyfer i Actionscript, for loop, mens loop, og det gjør loop. Det er også to andre typer som er løkker som benyttes spesielt for traversering en samling slik som en matrise, og kan ikke brukes på annen måte. Dette er de for ... i løkke og for ... hver sløyfe.

En ting å forstå om de tre "standard" looper er at de vil kjøre for alltid hvis du lar dem. En feil kodet sløyfe vil resultere i det som er kjent som en uendelig loop
, på grunn som datamaskinen vil pliktoppfyllende gjøre hva du fortalte det til å gjøre, og det er å behandle det samme blokk igjen og igjen helt til slutten av tid. Heldigvis er det for loop vanskelig å rote opp (selv om det sikkert skjer ofte nok), og på toppen av det, har Actionscript 3 innebygd uendelig loop beskyttelse. Hvis et skript kjøres i mer enn 15 sekunder uten å komme opp for luft, så vil du se en advarsel til effekten av "Et skript som forårsaker denne filmen til å kjøre sakte. Har du lyst til å avbryte?" Hvis du ser at mens du arbeider gjennom denne opplæringen, klikker du "Ja", fordi sjansene er du gjorde noe galt, og du kan like godt ta flukt luke som blir tilbudt deg. Uten denne exit, ville løkken bare kjøre og kjøre og kjøre, effektivt låse deg ut av å berøre Flash igjen før du manuelt avslutte den (Tvungen avslutning på Mac, Avslutt oppgave på Windows), og start Flash.
< p> Med det sagt, sløyfer er svært nyttig. Faktisk, de er uunnværlige programmeringsverktøy. De kan ta noen av tedium ut av å sette opp en haug med lignende knapper. De er nødvendige for å arbeide med dynamiske data, for eksempel når et vilkårlig antall elementer vil komme inn via XML. Du kan behandle partikkelsystemer med sløyfer. De aller fleste spillene krever bruk av loops. Og du kan oppnå en slik logikk som "gi meg noen tilfeldige tall med unntak av den siste du ga meg" eller "bygge en streng med det angitte antallet plasser i det."



Trinn 2: For Loop

Den mest brukte typen loop, i alle språk, er trolig for loop. Tre av de fem sløyfe konstruerer faktisk bruker ordet for, men man er referert til som "for loop" fordi det ikke er noen andre søkeord som er involvert i å lage en. La oss skrive en enkel for løkke:
for (var i: int = 0; i < 10; i ++) {trace ("Hello.");}

Og la oss bryte den fra hverandre. Først ute er for søkeord (som så mange av våre programmering konstruerer, starter denne med et søkeord). Umiddelbart etter dette er et sett med parenteser. Innsiden av disse parentes er faktisk tre hele Action uttrykk. Vi vil komme tilbake til disse i et sekund, men merk at det er to semikolon. Disse skille de tre uttrykkene. Neste er en åpning klammeparentes. Så har vi noen kode, og en avsluttende klammeparentes. Koden mellom klammeparentes er det som blir utført som sløyfe gjentas.

Nå, disse tre uttrykkene. De er:


    Den initializer

    Testen

    Telleren

    initializer er egentlig bare en uttalelse som går som aller første i loop. Det blir kjørt en gang, og det blir kjørt først. Så i dette eksempelet er det første vi gjør er å lage en variabel som heter "i" og sett den til 0.

    Testen er et uttrykk som bør vurdere å sant eller usant. Tenk på det som noe som ville være hjemme som betingelse for en hvis setningen. For loop bruker denne tilstanden før hver iterasjon av loopen for å se om den skal fortsette å gjennomføre. Så lenge betingelsen er sann, vil sløyfen fortsetter å bli utført. Så snart det er falskt, vil det bryte ut av sløyfen. I vårt eksempel betyr dette at så lenge den variable jeg har en verdi som er mindre enn 10, vil vi fortsette sløyfen. Skulle det noen gang lik 10 eller være større enn 10, vil løkken stoppe.

    Til slutt, er telleren en annen uttalelse som vil kjøre en gang for hver iterasjon av loopen, etter
    alle kode mellom klammeparentes har utført. Ser vi på vårt eksempel, er dette den siste brikken i puslespillet, og vi kan se at etter vi spore "Hei", vi tar det i variabel og øke den ved 1.

    Det er nyttig å gå gjennom livet av en løkke i sakte tempo. Her er hva som skjer:


      Lag en variabel kalt "i" og sett den til 0.

      Sjekk om variabelen jeg er mindre enn 10. Det er for tiden 0, så det er sant, så vi ...

      Trace ut "Hello".

      Økning i. jeg er nå 1.

      Sjekk om variabelen jeg er mindre enn 10. Det er nå ett, så det er fremdeles sant, så vi ...

      Trace ut "Hello".

      Økning i. jeg er nå 2.

      Sjekk om variabelen jeg er mindre enn 10. Det er nå 2, så det er fremdeles sant, så vi ...

      Trace ut "Hello".

      Økning i. jeg er nå 3.

      ... og dette går på ... la oss gå videre til når jeg er 9 ...

      Økning i. jeg er nå 9.

      Sjekk om variabelen jeg er mindre enn 10. Det er nå ni, så det er fremdeles sant, så vi ...

      Trace ut "Hello".

      Økning i. Jeg er nå 10 år

      Sjekk om variabelen jeg er mindre enn 10. Det er nå 10 ... aha! 10 er ikke mindre enn 10 år betingelsen er usann, så nå avslutter vi løkken, og fortsette å utføre kode umiddelbart etter stengetid klammeparentes.

      Hvis du har vært å holde score, vil du har lagt merke til at vi burde ha sporet "Hello". 10 ganger. Husk at mens vi stoppe når jeg er lik 10, starter vi i på 0, så jeg intervaller fra 0 til 9, noe som åpner for 10 gjentakelser. Legg merke til hvordan dette gjenspeiler det faktum at Arrays har indekser som starter på 0. Selv om du lett kunne skrive for løkker som starter på 42 og kjøre mens jeg er under 52 - og dermed oppnå 10 gjentakelser - det er svært gode grunner til å sørge for at du prøver å stokk med starter på 0. Jeg er nødt til å trekke en "stol på meg" på dette, men i utgangspunktet så lenge du er konsekvent, kan du unngå mange uventede resultater i det lange løp.
      < p> Gå videre og kjøre denne biten. Du skal se ti "Hellos" i utdatapanelet.

      Det i seg selv er ikke veldig nyttig. Hvis jeg ønsket å spare tid når jeg skriver linjer etter skolen ("Jeg vil ikke forlate variabler utypet. Jeg vil ikke forlate variabler utypet. Jeg vil ikke ..."), så dette er flott. Men nesten alltid at du kommer til å ønske å variere hva som skjer i hver iterasjon av litt. Sikkert, må det være en måte å oppnå dette?

      Det er sikkert! Du vet at variabel "i" vi laget for å holde orden på loop? Kan du tro at det er en variabel akkurat som alle andre variable i Action? Husk, selv om de tre uttrykkene innenfor parentesene ser litt annerledes, de er fortsatt bare Action uttrykk. Vi kan teknisk sette alle
      gyldig Action der. Jeg anbefaler ikke å gjøre det, men i alle fall ikke for nybegynnere. Mitt poeng, i stedet, er at den variabelen "i" er tilgjengelig for oss. La oss endre loopen kroppen slik at i stedet for å spore "Hello". vi spore i:
      for (var i: int = 0; i < 10; i ++) {trace (i);}

      Og kjøre den. Du vil se at vi har en liste med heltall fra 0 til 9. Å ha dette tilgjengelig åpner opp en verden av muligheter, som vi vil begynne å utforske litt senere.

      Jeg bør påpeke at Navnet "i" for denne type sløyfe er en sterk konvensjon ikke bare i Actionscript, men nesten alle programmeringsspråk. Du er fri til å bruke hvilken som helst variabel navn du liker, men hvis du bruker bare "jeg", så vil alle vite hva du holder på med, som er en god ting.

      Og som en avskjed tanke på for looper, hvis du ønsker å se en uendelig løkke i aksjon, prøv dette:
      for (var i: int = 0; i < 10; I--) {trace (i);}

      Can du oppdager hvorfor denne sløyfen vil aldri slutt



      Trinn 3:? Mens og Do

      Det er to andre "standard" looper som er egentlig bare variasjoner over samme idé. Vi skal se på dem kort for fullstendighets skyld.

      Først, la oss se på mens loop. Dette er faktisk kjernen sløyfe konstruere. En for loop blir samlet i en stund loop. Hver nå og da skjønt, kan en stund løkke gjøre noe som en for løkke er litt for tungvint for. Mens loop ser slik ut:
      Var i: int = 0; while (i < 10) {trace (i); i ++;}

      Dette er faktisk nøyaktig samme som vår for loop fra det siste trinnet, bare skrevet med en stund. Mens loop selv starter med nøkkelordet stund og inkluderer klammeparentes. Den første linjen er bare vår initializer, noe som er nødvendig for å få klar for loop, men blir ikke tatt vare på automatisk som det er med en for loop. Den delen mellom parentes etter søkeordet er testen. Så lenge det er sant, vil løkken utføre. Loop Kroppen består av ikke bare det vi ønsker å skje (spor i), men også inkrementeringen av den i variabelen. Igjen, er det nødvendig å vie en linje til dette, selv om det for loop gir en bekvemmelighet for dette svært vanlig idiom.

      I andre ord, dette er koden nøyaktig den samme som for loop fra tidligere, bare med mer linjer involvert. Det er teknisk sett ikke mer code
      , bare mer linjer
      .

      Så hvorfor bruke en stund loop? Vanligvis er det fordi vi ikke har en klar idé om nøyaktig hvor mange ganger noe må skje. Tenk deg en spillfigur som beveger seg i en bestemt retning, og det er behov for å stoppe når en vegg blokker sin vei. Vi kunne tenkes å skrive noe sånt som:
      while (! Character.hitTest (vegg)) {character.forward ();}

      Det gjør sløyfe er et ofte oversett fetter av mens loop. De er praktisk talt identisk, med to små unntak. I en gjør loop, er nøkkelordet gjøre (duh!). Og også, samtidig kommer etter
      den avsluttende klammeparentes. Det ser ut som dette:
      Var i: int = 0; do {trace (i); i ++;} while (i < 10);

      Den funksjonelle forskjellen mellom de to er at i en gjøre loop, er du garantert at sløyfen kroppen vil utføre minst én gang. I en stund loop, er det mulig at tilstanden ikke kan oppfylles i utgangspunktet, i hvilket tilfelle kroppen aldri utfører.

      Tenk deg en spesialisert tilfeldig tall generator. Du ønsker å velge et tilfeldig tall mellom 1 og 10 hver gang en knapp klikkes, men du vil være sikker på at nummeret er ikke alltid det samme som det siste nummeret som ble valgt. Med en gjør loop, kan du velge et tilfeldig tall, sammenligne det med det siste nummeret, og deretter gjenta prosessen om nødvendig. I dette tilfellet må du velge minst ett nytt tilfeldig tall. Det kan være alt du trenger, men det må skje minst en gang. Tenk deg den var "randomNumber" holder dagens tilfeldig tall, og at denne koden er inne i, sier, en funksjon som er koblet opp til tasteklikk-
      Var lastNumber. Int = randomNumber; do {randomNumber = Math.ceil (Math.random () * 10);} while (randomNumber == lastNumber);

      Denne koden skaper en midlertidig variabel kalt "lastNumber" som lagrer dagens "randomNumber" verdi. Så vi går inn i do loop. Siden det er en do, kjører vi kroppen, så fortvil om tilstanden, så vi gir "randomNumber" en ny tilfeldig verdi (ved å ta noen verdi generert gjennom Math.random (), som er 0 til 1, multiplisere med 10, og deretter avrunding opp med Math.ceil ()). Så vi sjekke tilstanden: hvis den nåværende verdien av "randomNumber" (som vi nettopp endret) er den samme som den verdien som er lagret i "lastNumber" (som var den siste virkelige verdien av "randomNumber"), og deretter holde looping. Forsøk igjen, med andre ord. Så hvis "randomNumber" var 7, og første gang gjennom løkken også generert en 7, da vi skulle gå gjennom løkken igjen, til noe annet enn 7 oppnås. Resultatet er et tilfeldig tall som er aldri det samme som den siste vi hadde



      Trinn 4:. Fortsett

      Noen ganger er det nødvendig å endre kjøringen av en løkke mens vi er midt i kjører loop. Vi kan faktisk gjøre to ting fra inne i en løkke som endrer flyten av at loop.

      fortsette er et nøkkelord som forårsaker sløyfen til umiddelbart å starte itera igjen. Det kan forlate kode utfårte i kroppen, og det er faktisk det punktet fortsetter-ing en løkke. Du bruker det slik:
      for (var i: int = 0; i < 10; i ++) {trace (i); if (i > 5 & & i < 8) {fortsette; } Trace ("Verdien av i er:" + i);}

      Dette er ikke en veldig nyttig eksempel, men det illustrerer bruken og effekten av fortsette. Dette er et typisk for loop, med "jeg" går fra 0 til 9. Det første i blokken er å spore opp "i." Ingen big deal så langt. Deretter sjekker vi for å se om "jeg" er innenfor en viss rekkevidde: over 5 og under 8. Hvis det er, så vi fortsetter. Den siste linjen er et annet spor. Så, mens "i" er 0, 1, 2, 3, 4 eller 5, ser vi to spor for hver verdi av "i". Men da "i" tenner 6, som er større enn 5 og mindre enn 8, så vi fortsette. Derfor denne iterasjon av loopen stopper umiddelbart, og vi starter neste iterasjon, med "i" økes og satt til 7. 7 også oppfyller kriteriene, og vi trekker en lignende triks. I begge tilfeller, fordi vi har fortsatt før den siste linjen av blokken, vi bare se én trase for disse to verdier av



      Trinn 5 "i.": Bryt

      break er en slags panikk-knapp for sløyfer. Bruke det vil føre til sløyfen å bare avslutte sin utførelse, uansett hvor sant tilstanden er. pause kan være nyttig for å bygge i fail-safe i mens og gjøre loops, siden de kan være utsatt for uendelige løkker. Tenk:
      Var num: Number; do {num == Math.random ();} while (! Num = 0,42);

      Dette gjør loop, mens ikke teknisk sett en uendelig loop, vil mest sannsynlig utløse skriptet timeout grense før noen gang å generere akkurat
      0,42. Vi kan bygge en sikkerhetsmekanisme som så:
      Var num: Number; Var loopCounter: int = 0; do {num == Math.random (); loopCounter ++; if (loopCounter > 500) {break; }} While (num = 0,42!);

      Det er litt mer arbeid, men det sikrer at vår sløyfe aldri vil kjøre mer enn 500 ganger

      pause er mer nyttig enn akkurat det, though.. Du ønsker kanskje å sløyfe gjennom en Array, og lete etter en bestemt verdi. Når du finner en kamp, ​​er det ingen grunn til å holde skanne resten av Array, så du kan like godt bryte ut av loopen. Vi får se dette i aksjon om kort tid



      Trinn 6:. For hvert & For I

      Det finnes to typer looping strukturer som er spesielt utviklet for å fungere med samlinger som Arrays. De skiller seg på subtile måter, men gode programmerere vite forskjellene og vite når man skal bruke som en

      Først, la oss anta at vi hadde en Array.
      Var ær: Array = ["en", "to "," tre "," fire "," fem "];

      Nå kan vi løkken over
      dette Array. Det vil si, vi vet at Arrays implisitt er samlinger av verdier. Vi ønsker å ta hver enkelt verdi, og gjøre noe med hverandre etter tur. Dette er en svært vanlig oppgave, så det er praktisk å ha to typer sløyfe dedikert til denne handlingen

      Vi kan skrive en for ... i løkke slik:.
      For (var Indeks: String i Ary) {trace (index + ":" + ær [index]);}

      for ... i starter med for søkeordet på nytt, men bruk av i søkeord gjør dette annerledes enn vanlig for loop. Saken til høyre i er ting vi ønsker å sløyfe over (Array). Ting til venstre for i en variabeldeklarasjon. Denne variabelen er tilgjengelig for loop (og andre steder, forresten) og vil inneholde, for hver iterasjon gjennom løkken, indeks /nøkkel /navnet på hvert element som finnes i samlingen. I tilfelle av en matrise, får vi de numeriske indekser. Merk imidlertid at disse er konvertert til Strings.

      Så variabelen "indeks" har nøkkelen lagret i den. Dette betyr at vi kan få tilgang til de faktiske verdiene ved hjelp at nøkkelen i klammer på samlingen (ær [index])

      for ... hver sløyfer er svært like, med én viktig forskjell:. Stedet for å opprette en variabel for å holde nøkkelen, oppretter du en variabel for å holde den faktiske verdien av elementet i samlingen
      for hver (var element: String i ær) {trace (element);}

      Legg merke til at datatype er. String for variabelen "element." Dette er tilfeldigvis det samme som det vi hadde i for ... i loop. Men i dette tilfellet datatype drives av hvilke verdier som faktisk er lagret i tabellen. Hvis vi hadde denne Array:
      Var ær: Array = [1, 2, 3, 4, 5];

      Vår sløyfe kan se slik ut:
      for hver (var element: int i ær) { ...

      I kroppen av løkken, den variable vi deklarert vil holde verdien fra samlingen i hver iterasjon. Vi måtte gå gjennom en liten bøyle for å få denne verdien i for ... i loop. Den for ... hver sløyfe en tendens til å være litt renere. Men, trenger du ikke har tilgang til nøkkelen i denne sløyfen, så hvis det er viktig, må du bruke en annen type loop.

      for ... hver løkkene er ikke bare raskere å skrive, de er raskere å utføre. Så hvis den type sløyfe passer dine behov (det vil si at du ikke trenger å vite nøkkelen), vil du kanskje foretrekke det



      Trinn 7:. Nestede Loops

      Det er sikkert mulig å reir loops, akkurat som det er mulig å lage multi-dimensjonale arrays. Det er en enkel sak å gjøre det, bare sørg for å hedre innrykk eller ting blir fryktelig vanskelig å lese:
      for (var i: int = 0; i < 5; i ++) {for (var j: int = 0; j < 5; j ++) {trase (i + »,« + j); }}

      Hvis du kjører denne biten, vil du se noe som dette:
      0, 00, 10, 20, 30, 41, 01, 11, 21, 31, 42, 0 ... etc.

      Dette gir en matrise av verdier. I dette tilfellet får vi alle kombinasjoner fra 0, 0 til 4, 4.

      Vær imidlertid oppmerksom på at det er ekstremt
      viktig å bruke en annerledes
      variabelnavn for den nestede loop. Vi brukte "i" for første loop (kjent som ytre
      loop) og "j" for de andre sløyfer ( indre
      loop). Hvis vi hadde brukt "i" som vi vanligvis gjør, ville vi opp med nettopp dette:
      0, 01, 12, 23, 34, 4

      Det kan bare være én variabel "i" på en gang, og så "i" når 5 på den indre sløyfe og oppfyller derfor tilstanden i den ytre sløyfe, så vel som avsluttes hele ting vi tidligere enn beregnet. Heldigvis Actionscript 3 har noen innebygd beskyttelse som bidrar til å forhindre denne feilen

      Det er mulig å bygge opp multi-dimensjonale arrays som dette:
      Var grid: Array = []; for (var i. Int = 0; i < 5; i ++) {grid [i] = []; for (var j: int = 0; j < 5; j ++) {gitter [i] [j] = i + »,« + j; }}

      Det er også verdt å merke seg at vi kan bryte ut av (eller fortsette) nestet sløyfer ved navn. Hvis du bruker pause i en indre loop, det bare bryter strømmen (indre) loop, ikke den ytre loop. Hvis du trenger å bryte den ytre sløyfen fra innenfor indre loop, kan du merke den ytre sløyfe ut:
      outerLoop: for (var i: int = 0; i < 5; i ++) {for (var j: int = 0; j < 5; j ++) {trase (i + »,« + j); hvis (i == 3 og &Co. j == 2) {bryte outerLoop; }}}

      Legg merke til den aller første bit: etiketten, et kolon, og
      for uttalelse. Dette gir den ytre løkken en etikett vi kan bruke med pause og fortsette. Så i den indre løkken, på en eller annen vilkårlig tilstand, bryter vi ut av hele løkken ved å angi hvorav sløyfe å bryte



      Trinn 8:. Looping Over Arrays

      har sett hvordan du bruker den for ... i og for ... hver looper til løkken over Arrays. Men det er veldig vanlig å bruke normal for loop for å iterere over Arrays. Fordelene med å gjøre dette er at vi har tilgang til indeksen (i motsetning til for ... hver), og vi får indeksen i int form (i motsetning til for ... i).

      Så på sitt mest grunnleggende ser det ut som dette:
      Var ær: Array = ["en", "to", "tre", "fire", "fem"]; for (var i: int = 0; i < ær. lengde; i ++) {trace (ær [i]);}

      Men, når du gjør dette, er det lurt å følge noen regler i navnet på optimalisering. For denne enkle 5-iterasjon sløyfe, det er ikke en stor avtale, men jeg oppfordrer deg til å gjøre det til en vane å bare alltid bruke disse ideene.

      Først ser opp ary.length hver gang i den tilstanden er på tide -consuming. Med mindre vi faktisk endre lengden på Array i
      loopen, bør vi få den verdi en gang, lagre den i en variabel, og bruke variabelen i sjekk:
      Var ær: Array = ["en", "to", "tre", "fire", "fem"]; Var len: int = ary.length; for (var i: int = 0; i < len; i ++) {trace ( ær [i]);}

      For det andre, sørg for at numeriske datatyper kamp mellom "i" variable og din "Len" variabel. Sammenligninger er raske mellom og int og en annen int, eller et nummer, og et annet nummer, men hvis du gjør "i" en int og gjøre "len" et nummer, er at sammenligning betydelig tregere.

      For det tredje, når du får et element ut av Array, sørg for å lagre den i en variabel, så vel. Som en ekstra optimalisering triks, deklarere variabelen utsiden av loopen. Også sette en datatype på variabelen. Alt dette legger opp til større hastighet når du bruker dette elementet ut av Array
      Var ær: Array = ["en", "to", "tre", "fire", "fem"]; Var len.: int = ary.length; Var element: String; for (var i: int = 0; i < len; i ++) {element = ær [i]; trace (element);}



      Trinn 9: The Mission

      Nå som vi har fått gjennom den tørre teorien, la oss bygge noe morsomt: en enkel shoot-em-up spill, basert loosley ( ekstremt
      løst) på den klassiske Asteroids. Vi vil bruke looper å iterere over samlinger av kuler og fiender, og utføre hit tester på hver. Ikke forvent for mye i form av spillet; vårt formål er å bruke looper i en praktisk setting, ikke lære ins og outs av spilldesign.

      En startpakke FLA er utstyrt med grunnleggende kunstverk. Som vanlig for AS3 101-serien, er vi mer interessert i å lære å programmere, og mindre i den grafiske produksjonen av et prosjekt. I interesse av tid, vil vi

      En rask gjennomgang av FLA er i orden, men forutsetter at du startet med FLA gitt i kildefilene.. Det finnes noen få elementer i biblioteket, de fleste som er på scenen. Det er spillerens skipet:

      Dette er på scenen på venstre, mot høyre. Den har en forekomst skipets navn. Skipet vil bevege seg vertikalt som reaksjon på spillerens mus bevegelse, og vil aldri forandre sin rotasjon eller horisontal stilling. Du kan legge merke til at registreringen punktet av skipet er sentrert, for å gjøre det enklere å posisjonere til musen

      . Det er et symbol kalt Asteroid, som representerer noe for spilleren å kjempe.

      Dette er ikke plassert på scenen, men er i stedet forberedt for bruk med Actionscript. Du legger kanskje merke i biblioteket at dette symbolet har en oppføring under "Kobling". Dette lar oss arbeide med symbolet, og sette opp enkelttilfeller, gjennom koden. Asteroids vil bevege seg i en tilfeldig retning, og vikle rundt kantene på scenen

      Det er et annet symbol kalt Bullet.

      Det er ikke på scenen, men har en Heis identifikator, som Asteroide symbol. Bullets vil bli knyttet til scenen auto, og skyte fra spillerens skipet mot høyre. Hvis det er en kollisjon mellom en kule og noen asteroide, begge er fjernet.

      Dette faktisk fører til en av de triksene som er involvert i programmering Arrrays og sløyfer. Vi får inn i detaljene fort nok, men holde et øye ut for et par feller med vår looping.

      Til slutt er det en "You win!" tegn som er lagt inn på scenen i sentrum med forekomstnavnet seier.

      Dette vil være usynlig til spilleren skyter alle fire asteroider, noe som medførte at spillet vil stoppe og dette vil vises.



      Trinn 10: Begynn Coding

      Som er vanlig praksis når du skriver tidslinje skript, opprette et nytt lag og gi den navnet noe sånt som "code" eller "script", og låse den. Som et spørsmål om organisering, aldri blande lagene med kunstverk og kode. Også prøve å holde all kode i et enkelt script, så mye som er mulig.

      Med din lag opprettet og valgt, trykker du F9 (Opt-F9 på Mac) for å åpne Handlinger panelet. Klikk på pin-ikonet nederst for å holde den fra å miste konteksten hvis du klikker rundt programmet.

      Det første vi vil gjøre er å sørge for at gevinsten skjermen er skjult. Så den aller første bit vi skal skrive er:
      win.visible = false;



      Trinn 11: Arrays for bagasje

      Den neste bit av vår skriptet vil være å opprette to Arrays som vil holde alle asteroider på skjermen (i en Array) og alle kuler på skjermen (i den andre). Begge Arrays er tomme for nå. Vi vil opprette kuler og asteroider som vi trenger dem og stappe dem inn i Arrays. Våre neste par linjer se slik ut:
      Var asteroider: Array = []; Var kuler: Array = [];

      Vi kommer til å manipulere disse Arrays i bare en liten bit, så hvis du trenger en primer på Arrays, henvises det til min siste tutorial på arrays



      Trinn 12:. Lag Asteroids

      Vi vet at vi ønsker å lage 4 asteroider, så vi kommer til å bruke en enkel mens loop å lage og sette dem opp
      stund (asteroids.length < 4) {var asteroide. MovieClip = ny asteroide (); asteroid.x = 450 + Math.random () * 200-100; asteroid.y = Math.random () * (stage.stageHeight - asteroid.height); addChild (asteroide); asteroids.push (asteroide);}

      Her kan vi lage en ny forekomst av asteroide symbol. Deretter plasserer vi den tilfeldig (vi å plassere x 100 piksler i 450, og y hvor som helst innenfor en høyde på scenen). Neste vi bruker addChild () slik at vi kan se det, og deretter lagre den i asteroider Array bruker push.

      Hvis den nye asteroide () ting er nytt for deg, ikke bekymre deg, vi vil være dekker skjermen liste temaer i neste AS3 101 tutorial

      Legg merke til at denne stund loop fungerer. det holder å kjøre til lengden på Array er fire (eller høyere). Og i hver iterasjon av Array, ender vi opp med å legge ett element til Array. Derfor kjører loopen 4 ganger.

      Hvorfor har jeg bruke en stund loop og ikke en for loop? Delvis fordi dette virket som en renere tilnærming. Til slutt, spiller det egentlig ingen rolle, men siden vi ikke egentlig trenger tellervariabelen som vanligvis brukes i for looper, kan vi spare litt skrive ved hjelp av en stund loop. Jeg skal innrømme, skjønt; det er delvis fordi det virket som en god plass å bruke en stund loop for opplæringen skyld. Bare husk at det er alltid mer enn én måte å oppnå samme resultat, og banen du velger har så mye å gjøre med personlige preferanser som det gjør med "den rette måten" å gjøre ting (oh, og forresten, det er ingen "riktig måte" å gjøre ting i programmering)



      Trinn 13:. Opprett et animasjons Tick

      For å kjøre spillet, må vi gjøre mange ting hver gang scenen oppdateringer, på bildefrekvens. Vi setter opp en hendelse lytteren for ENTER_FRAME hendelsen, og gjøre det meste av vår logikk i lytteren funksjonen. For nå, bare sette opp skjelettet:
      addEventListener (Event.ENTER_FRAME, onTick), funksjon onTick (e: Hendelses): void {trace ("spill kommer ...");}

      Hvis du vil, du kan teste dette for å sikre at den spor branner gjentatte ganger over tid



      Trinn 14:. Flytt Ship

      Med onTick funksjon satt opp, kan vi begynne å flytte ting rundt. Vi begynner med skipet

      Vi vil bare matche skipets y til musens y:
      funksjon onTick (e: Hendelses):. Void {ship.y = stage.mouseY;} < p> Dette ber scenen for y koordinere av musen. Dette er forskjellig fra å spørre en annen MovieClip for mus koordinater; du få verdiene tilbake i koordinatsystemet plass av MovieClip du spurte. Ved hjelp av scenen, vet vi at vi er i den primære koordinere plass.

      Hvis du tester dette nå, skal du se at skipet beveger seg opp og ned i respons på musen.


      < h2> Trinn 15: Begynn Flytte Asteroids

      Vi kan sette asteroiden bevegelse logikk i onTick fungerer så godt, men det er litt mer involvert. Først vil vi bruke en løkke til å rulle gjennom asteroide Array. Så for hver asteroide, vil vi legge til (eller trekke fra) gjeldende x og y av et bestemt beløp. Dette har effekten av å flytte ting trinnvis sammen med hver ramme, som produserer en illusjon av jevn bevegelse over tid. Plasser følgende kode etter koden for å flytte skipet:
      for hver (var asteroide: MovieClip i asteroider) {asteroid.x + = 3; asteroid.y + = 4;}

      Her er vi bruker for hver sløyfe for bekvemmelighet - vi trenger ikke å vite Array-indeksen (og vi vil ikke, selv etter fleshing denne sløyfen ut litt). Test denne filmen, og asteroiden bør flytte, selv om deres bevegelser er mindre enn ideell, for å være sikker. Asteroider vanligvis ikke fly i formasjon



      Trinn 16:. Wrap asteroider rundt kantene

      I spillet vårt akkurat nå, er flat verden og du bare forsvinner utenfor kanten og aldri komme tilbake hvis du går for langt. La oss gjøre verden rundt, slik at du går ned i én retning betyr at til slutt vil du dukke opp igjen kommer fra den andre retningen. Vi vil gjøre dette ved å sjekke x og y for hver asteroide etter at du flytter dem. Hvis de er plassert slik at hele asteroide er off-screen, vil vi justere x eller y, slik at de kommer tilbake på den andre siden. Fyll ut for hver sløyfe fra siste trinn med dette:
      for hver (var asteroide: MovieClip i asteroider) {asteroid.x + = 3; asteroid.y + = 4; if (asteroid.x < -asteroid.width) {asteroid.x = stage.stageWidth; } Else if (asteroid.x > stage.stageWidth) {asteroid.x = -asteroid.width; } If (asteroid.y < -asteroid.height) {asteroid.y = stage.stageHeight; } Else if (asteroid.y > stage.stageHeight) {asteroid.y = -asteroid.height; }}

      Vi gjør fire sjekker hjelp hvis uttalelser. Vi kontrollerer x posisjonen til hver asteroide to ganger, en gang for den venstre kant og en gang til høyre kant. Deretter sjekker y posisjon to ganger, for den øverste og den nederste. I alle tilfeller er vi sjekker for å se om MovieClip er helt utenfor kanten, og deretter å flytte det slik at det er helt utenfor den motsatte kanten.

      For eksempel ta det første hvis setningen. addChild (b); gå i stykker; gå i stykker;