Laser Generator, Hindringer og Nøyaktig Hit Detection

Laser Generator, hindringer og Nøyaktig Hit Detection
Del
Del
Del
Del

Dette Cyber ​​Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Hei, venner. Hovedpunktet i denne opplæringen er nøyaktig hit påvisning av en generert laser. Denne typen AI er nyttig i å lage action spill, spesielt når det gjelder sikkerhet etterretning med kameraer, laserpistoler etc. Så sette rakett på ryggen, begynner ..



Endelig resultat Forhåndsvisning

La oss ta en titt på det endelige resultatet vi skal jobbe mot:



Trinn 1: Klar Flash File

Åpne Flash og opprette en ny Flash-dokument (Actionscript 3.0).

Sett scenen størrelsen til en standard oppløsning. Mine er 500 x 350 px

Sett bildefrekvensen til 24 fps

Lagre filen i en mappe



Trinn 2:... Opprette Laser Generator Device

La oss nå lage en laser generator.

Tegn en sirkel med radius 20, dvs. 40 x 40. Også, fyll den med noen fine radial gradient farge.

Nå må vi konvertere denne sirkelen inn i en Flash symbol, slik at vi kan styre den med Action

Velg sirkelen og trykk på F8 eller gå til Modify >.; Konverter til Symbol
. Velg Movie Clip for symboltype. Også satt registreringspunkt til sentrum, slik at laseren generator vil rotere fra sentrum. Skriv laserGenerator_MC inn eksempel navnefeltet og deretter sist men ikke minst sjekke "Export for Action" i "Advanced" gruppe, slik at vi kan få tilgang til laser generator fra vårt dokument klassen som vi skal møte snart.

Etter innstilling alle de ovennevnte alternativene trykker OK. Trykk OK igjen for dialogboksen som viser advarsel for klassedefinisjonen. Dette vil skape et klassedefinisjon for laser generator under kjøring.

Nå trenger vi ikke laserGenerator_MC symbol på scenen siden det er tilgjengelig i Bibliotek-panelet med identifikatoren navn laserGenerator_MC. Derfor slette dette symbolet fra scenen. Scenen skal være tom nå



Trinn 3:. Forbedre Look of Laser Generator

Nå som vi skal legge en munn til dette generator for å lage noen følelse av en enhet. I biblioteket panelet dobbeltklikk på laserGenerator_MC symbol ikonet (venstre side av symbolet navn) for å gå inn i redigeringsmodus. Legg munnen til den som vist nedenfor

Du kan legge til ditt eget design on

Merk:... Ikke endre posisjonen av sirkelen siden vi trenger å rotere den rundt sitt sentrum

Etter å legge en munn til generatoren, exit fra symbolredigeringsmodus og komme tilbake til hovedtidslinjen.

Din rakett har forlatt bakken. Laseren generator enheten er klar og venter på å utføre



Trinn 4:. Klardokument Class

For å legge til et drama til vår scene trenger vi Actionscript. Å handle smart vi trenger dokument klasse.

I dette trinnet skal vi skape en grunnleggende strukturen i vår dokument klasse.

For detaljert forklaring om dokument Class sjekke ut denne hurtig Tip.
< p> Så skape ny Actionscript 3.0-fil. Skriv inn følgende kode:
pakken {public class Laser_HitDetection {offentlig funksjon Laser_HitDetection () {//konstruktør kode}}}

Lagre dette dokumentet klassen som Laser_HitDetection.as
i samme mappe der du lagret FLA for denne opplæringen. Nice ta av. Din grunnleggende dokument klassen er klar



Trinn 5:. Fest Document Class til FLA


I ditt FLA filtilgang Properties panelet for dokument og skriv navnet på klassen i dokument Class feltet tilgjengelig under "Publiser" gruppe.

Nå er vi klare til å kommunisere med FLA gjennom dette Laser_HitDetection.as
dokumentet klasse.



Trinn 6: Sted og Juster Laser Generator på Stage Centre


Vi skal opprette en forekomst av laser generator fra biblioteket og legg den til midten av scenen

Endre Laser_HitDetection.as
dokumentet klasse som vist nedenfor (uthevet linjer):
pakke {import flash.display.Sprite; public class Laser_HitDetection strekker Sprite {var laserGun: Sprite; //Instans laserGenerator_MC //Constructor offentlig funksjon Laser_HitDetection () {CreateLaserGun (); } //Get og sted laser generator fra biblioteket offentlig funksjon CreateLaserGun (): void {laserGun = new laserGenerator_MC (); //Få det fra biblioteket addChild (laserGun); //Place laser generator i sentrum av scenen laserGun.x = stage.stageWidth /2; laserGun.y = stage.stageHeight /2; }}}

Hvis du tester filmen nå, vil du se vår laserpistol pent plassert i sentrum av scenen



Trinn 7:. Forståelse CreateLaserGun () -metoden


I koden ovenfor vi brukte Sprite klassen til å opprette en forekomst av Sprite objekt som vil holde laser. For at erklærer vi variabelen som:
Var laserGun: Sprite;

Så vi lagt til en ny metode " CreateLaserGun ()
" der vi tildelt en forekomst av laserGenerator_MC fra biblioteket til ovennevnte laserGun var som:
laserGun = new laserGenerator_MC ();

Etter å legge det til det stadiet vi plassert den på midten av scenen som:
laserGun.x = stage.stageWidth /2; laserGun.y = stage.stageHeight /2;

Til slutt kalte vi denne metoden fra konstruktøren metoden av dokumentet klassen som:
//Constructorpublic funksjon Laser_HitDetection () {CreateLaserGun ();}

Rocket akselererer med full thrust. Vi skal aktivere denne laserpistol veldig snart som vil projisere laser. Før det skal vi legge noen hindringer. La oss gå.



Trinn 8: Legge Hindringer i ulike former


For å eksperimentere med hit oppdagelse vi trenger noen hindringer plassert på scenen. Så, på scenen tegne forskjellige figurer som ligner konveks-konkave overflater, slope-klatring, og rette kanter, som vist nedenfor:



Trinn 9: Konvertering alle Hindringer Into Enkelt MovieClip


Nå skal vi sette alle disse figurene i ett symbol. Velg alle fasonger på en gang og trykk F8 eller gå til Modify > Konverter til Symbol
. Velg filmklipp som symbol type. Nevne dette symbolet obstacles_MC i navn tekstfeltet. Still registreringspunktet i senter. Sjekk også "Export for Actionscript", slik at vi kan få tilgang til det fra vår dokumentklassen.

Etter å konvertere til MovieClip vi har obstacles_MC i biblioteket med samme identifikator navn. Simlilary som laserGenerator_MC trenger vi ikke dette symbolet på scenen, så slette det fra scenen. Nå scenen er tom



Trinn 10:. Place og Juster Hindringer Symbol på Stage Centre


Den måten vi har lagt vår laserGenerator_MC på scenen, på senteret, på samme måte vi skal plassere obstacles_MC symbol på scenen. Endre dokumentet klassen som vist nedenfor:
pakke {import flash.display.Sprite; public class Laser_HitDetection strekker Sprite {var laserGun: Sprite; //Instans laserGenerator_MC Var hindringer: Sprite; //Instans obstacles_MC //Constructor offentlig funksjon Laser_HitDetection () {CreateLaserGun (); CreateObstacles (); } //Get og sted laser generator fra biblioteket offentlig funksjon CreateLaserGun (): void {laserGun = new laserGenerator_MC (); //Få det fra biblioteket addChild (laserGun); //Place laser generator i sentrum av scenen laserGun.x = stage.stageWidth /2; laserGun.y = stage.stageHeight /2; } //Get og vanskelig fra bibliotek offentlig funksjon CreateObstacles (): void {hindringer = new obstacles_MC (); //Få det fra biblioteket addChild (hindringer); //Plasser hindringer i sentrum av scenen obstacles.x = stage.stageWidth /2; obstacles.y = stage.stageHeight /2; }}}

Test filmen for å se hindringer plassert rundt i laserpistol.

Din rakett er nå terminal hastighet. Nå er det på tide å aktivere laserpistol. Det må generere lasers fra den. La oss gjøre det nå



Trinn 11:. Prosjektering Laser


Hvordan skal vi etterligne laser? Noen gjetning? ............... Hva med å bruke noen medlemmer av Graphics klassen som linestyle (), moveTo (), lineTo (). Hvis du er kjent med disse metodene så din jobb er enkel. For de som ikke kjenner disse metodene, er vi alltid med deg. La oss se dem i detalj.

Vi skal legge til en ny metode ProjectLaser (). La oss endre vår Laser_HitDetection dokumentet klasse som vist nedenfor:
//Constructorpackage {import flash.display.Sprite; public class Laser_HitDetection strekker Sprite {var laserGun: Sprite; //Instans laserGenerator_MC Var hindringer: Sprite; //Instans obstacles_MC Var laser: Sprite; Var startx: Number; //x startpunktet for laser Var starty: Number; //y utgangspunktet for laser Var endX: Number; //x endepunkt for laser Var Endy: Number; //y endepunkt for laser //Constructor offentlig funksjon Laser_HitDetection () {CreateLaserGun (); CreateObstacles (); ProjectLaser (); } //Get og sted laser generator fra biblioteket offentlig funksjon CreateLaserGun (): void {laserGun = new laserGenerator_MC (); //Få det fra biblioteket addChild (laserGun); //Place laser generator i sentrum av scenen laserGun.x = stage.stageWidth /2; laserGun.y = stage.stageHeight /2; } //Get og vanskelig fra bibliotek offentlig funksjon CreateObstacles (): void {hindringer = new obstacles_MC (); //Få det fra biblioteket addChild (hindringer); //Plasser hindringer i sentrum av scenen obstacles.x = stage.stageWidth /2; obstacles.y = stage.stageHeight /2; } //Prosjekt en laser fra laser generator enhet offentlig funksjon ProjectLaser (): void {laser = new Sprite (); addChild (laser); //Sett opprinnelsen til laser som sentrum av laserpistol startx = laserGun.x; starty = laserGun.y; //Sett endepunkt for laser endX = startx + 230; Endy = starty; //Tegn laser laser.graphics.lineStyle (1, 0xff0000); laser.graphics.moveTo (startx, starty); laser.graphics.lineTo (endX, Endy); }}}

Test filmen.

Raketten er rett der oppe i himmelen. Laservåpenet har begynt å projisere laser. Hvordan skjedde det? La oss prøve og forstå koden ovenfor i neste trinn.



Trinn 12: Hvordan er Laser projiserte


I det foregående trinn vi lykkes anslått en laser. For som utførte vi følgende oppgaver:

Først må vi erklært fem nye variabler:
Var laser: Sprite; Var startx: Number; //x utgangspunkt for laservar starty: Number; //y utgangspunktet for laservar endX: Number; //x endepunkt for laservar Endy: Number; //y endepunkt for laser

For det andre har vi lagt til en ny metode ProjectLaser ():
offentlig funksjon ProjectLaser (): void {laser = new Sprite (); addChild (laser); //Sett opprinnelsen til laser som sentrum av laserpistol startx = laserGun.x; starty = laserGun.y; //Sett endepunkt for laser endX = startx + 230; Endy = starty; //Tegn laser laser.graphics.lineStyle (1, 0xff0000); laser.graphics.moveTo (startx, starty); laser.graphics.lineTo (endX, Endy);}



Trinn 13: Forstå ProjectLaser () Metode


I ovennevnte metoden først vi opprettet en tom Sprite objekt til hold laser og også lagt det til scenen som vist nedenfor:
laser = new Sprite (); addChild (laser);

Som vi ønsket laser til å starte prosjektering fra laserpistol, vi tildele laser pistolens X verdi til startx og Y-verdi som starty som vist nedenfor:
startx = laserGun.x; starty = laserGun.y;

(Senere vi gitt disse verdiene til moveTo (startx, starty) metode som vi kommer til å . møtes snart)

Så vi definert endX og Endy:
endX = startx + 230; endy = starty;

Verdier tildelt over variabler er midlertidige verdier. Vi brukte dem bare for å vise den grunnleggende projeksjon av en laser. I kommende trinn skal vi endre disse verdiene ved å bruke noen enkel matematikk. Disse verdiene er nøkkelen til å gjøre perfekt hit påvisning av laseren. Vi skal studere dem senere i denne sesjonen.

Og nå viktig del av denne metoden. . Tegne en rett linje innen laser sprite objekt for å etterligne den projiserte laser

Først håndtert vi stilen på linjen som skal tegnes som vist nedenfor:
laser.graphics.lineStyle (1, 0xff0000); < p> Dette linestyle () metoden brukes til å kontrollere styling av hjerneslag av tegningen objekt som linje, rektangel, oval etc. Du kan gi maksimalt åtte argumenter til denne metoden. Hvis ikke spesifiserte standardverdier er tildelt i stedet. For vårt eksempel trenger vi bare to argumenter. Det første argumentet er tykkelsen på linjen (dvs. 1) og det andre argumentet er fargen på linjen (dvs. 0xff0000, som er rød).

For detaljert forklaring av denne metoden sjekke ut Adobe hjelp doc på "linestyle (args ..)" metoden

Så vi la startpunktet for linjen som vist nedenfor:
laser.graphics.moveTo (startx, starty);

startx og starty sikrer. . at utgangspunktet må være i sentrum av laserpistol

Etter at vi stoppet avsluttes opp linjen:
laser.graphics.lineTo (endX, Endy);

Husk at disse endX og Endy er midlertidige verdier bare for å vise projeksjonen. Vi trenger dem for å få justert hvis noen hindring kommer i veien for laseren. Vi skal gjøre det matte i kommende trinn.

Så trakk vi en linje fra (startx, starty) til (endX, Endy).

Raketten kommer og går. Se disse landskapene, Waterscapes ..

Nå er det tid for den virkelige handlingen. Hit deteksjon med hindringer



Trinn 14:. Hit Detection med Hindringer


Nå er vi utstyrt med en laserpistol. Vi har også flere hindringer. Vi er på det nivået hvor vi kan legge hit deteksjon som vil sikkert legge betydningen til scenen.

Du kan tenke at dette svært nøyaktig hit deteksjon vil kreve komplisert matematikk. Hvis ja så du er galt. Den bruker bare den hitTestPoint () bygget i metoden for Action sammen med en for loop. Den komplekse matematiske bak perfekt hit deteksjon håndteres ved denne metoden. Du trenger bare å bruke denne metoden, og en for loop på en smart måte.

Vi kommer til å gjøre noen viktige endringer i vår dokument klasse hovedsakelig til ProjectLaser () metoden og noen nye vars, så observere og bruke den nøye. La oss endre det som vist:

Først legge disse nye vars:
Var rad: Number = Math.PI /180; //Brukes til å beregne vinkelen i radiansvar maxDist: Nummer = 250; //maksimal avstand for å bli reist av laservar adjustedDist: Number; //ny maksimal avstand hvis noen hindring kommer på en måte

Så endre ProjectLaser () metoden ved å legge for sløyfe som vist nedenfor (også oppmerksom på at nå endX og Endy er inne for loop):
//Prosjekt en laser fra laser generator devicepublic funksjon ProjectLaser (): void {laser = new Sprite (); addChild (laser); //Sett opprinnelsen til laser som sentrum av laserpistol startx = laserGun.x; starty = laserGun.y; for (adjustedDist = 0; adjustedDist < maxDist; adjustedDist ++) {//trigonometri til å sikte laser wrt laserpistol rotasjon endX = laserGun.x + Math.cos (laserGun.rotation * rad) * adjustedDist; Endy = laserGun.y + tak i Math.sin (laserGun.rotation * rad) * adjustedDist; //beregne hit test if (obstacles.hitTestPoint (endX, Endy, true)) {break; }} //Tegn laser laser.graphics.lineStyle (1, 0 x FF0000); laser.graphics.moveTo (startx, starty); laser.graphics.lineTo (endX, Endy);.}

Test filmen

Boom ....
jeg sikker på. Ser på denne effekten du er inspirert til å lage en Flash Game ha sikkerhet etterretning. Perfekt AI, for å utvikle interessant spill i Flash



Trinn 15:. Hvordan Hit Detection Skjedde

Først av alt vi lagt til nye vars til vår dokumentet klasse som vist:

I utgangspunktet en vinkel, i radianer
Var rad: Number = Math.PI /180; //Brukes til å beregne vinkelen i radianer

Listen VaR benyttes i formel for å beregne en vinkel i radianer.

Formelen er, radianer = grader * Math.PI /180. Mer info her. Vi brukte denne formelen i koden vår, i disse linjene:
endX = laserGun.x + Math.cos (laserGun.rotation * rad) * adjustedDist; endy = laserGun.y + tak i Math.sin (laserGun.rotation * rad) * adjustedDist;

I laserGun.rotation * rad, grader = laserGun.rotation og rad = Math.PI /180

For det andre har vi opprettet en VAR for maksimal langt det skal gå med laser. :
Var maxDist: Nummer = 250; //maksimale avstand som skal tilbakelegges av laseren

Var bestemmer den maksimale avstand som skal tilbakelegges av laseren. Siden det ikke er nødvendig å trekke laser utenfor det synlige området, definerer vi en fin sluttpunkt. Dette Div vil gjøre det som trengs

For det tredje har vi en VAR for gjeldende avstand fra laser ved krysset med noen hindring
Var adjustedDist:.. Antall; //ny maksimal avstand hvis noen hindring kommer på en måte som

Når en hindring kommer i veien for laser, laser blokkert stedet for å reise til maksimal avstand.

Avstanden etter blokkering av en laser er ingenting men den justerte avstand avhengig av situasjonen.

for loop og hitTestPoint () hver spiller en viktig rolle i å beregne denne avstanden.

Fjerde, endret vi ProjectLaser () metoden ved å legge Action sin hitTestPoint () sammen med en løkke for. Vi omplassert endX og Endy variabler
for. (AdjustedDist = 0; adjustedDist < maxDist; adjustedDist ++) {//trigonometri til å sikte laser wrt laserpistol rotasjon endX = laserGun.x + Math.cos (laserGun.rotation * rad) * adjustedDist; Endy = laserGun.y + tak i Math.sin (laserGun.rotation * rad) * adjustedDist; //beregne hit test if (obstacles.hitTestPoint (endX, Endy, true)) {break; }}

for loop sørger for at den justerte avstanden økes opp til maksimal avstand. Du kan tenke "Hva er morsomt med å gjøre justerte avstand lik maksimal avstand?"

Egentlig er dette justert avstand lov til å matche den maksimale avstanden naturlig, men så snart den treffer hindringer (som er oppdaget av hitTestPoint () metoden) denne avstanden er merket som maksimal avstand for at dagens situasjon. . Takk til hitTestPoint () for å gjøre oppgaven så enkel

Vi har også overført endX og Endy verdier som:
endX = laserGun.x + Math.cos (laserGun.rotation * rad) * adjustedDist; Endy = laserGun.y + tak i Math.sin (laserGun.rotation * rad) * adjustedDist;.

trigonometri funksjoner Math.cos () og tak i Math.sin () brukes til å beregne vinkelen av laser wrt laserpistol rotasjon

I enkel form, det tar vare på sikter laseren hvor laser pistolen er ute. Det er viktig at laservåpenet og laser begge er synkronisert. Så når laserpistol roteres laseren vil følge rotasjonen

For mer informasjon om trigonometri, les denne Quick Tips

Til slutt klimaks scenen..
Hvis (hindringer .hitTestPoint (endX, Endy, true)) {break;}

hitTestPoint () metoden tar tre parametere, hvorav den første og andre parametere er nødvendig og den tredje (shapeFlag) vil bli stående som standard (dvs. false) hvis ikke spesifisert.

I vårt eksempel shapeFlag er satt til true Siden vi ønsker hit deteksjon med hensyn til den eksakte formen på målobjektet (dvs. hindringer). Hvis denne verdien er satt til false oppstår treffet deteksjon med hensyn til markeringsrammen for dette objektet og ikke den eksakte formen.

Den første og andre parametere av hitTestPoint () definerer et punkt (x, y) ved for å se etter krysset med skjermen objektet. I vårt tilfelle hindringer er at skjermen objekt, og endX og Endy representerer skjæringspunktet på scenen.

Uklar? Høyre. For å forenkle vi skal sette logikken i rekkefølge som følger:.


    for loop tillater projeksjonen av laser for å fortsette (ved å oppdatere endX og Endy) dersom innen maksimal avstand

    hitTestPoint () venter på å bryte for loop så snart den ser krysset. Når for loop er brutt, er endX og Endy frosset.
  1. Endelig disse frosset endX og Endy sendes til graphics.lineTo () -metoden.


    Trinn 16 : Bruk Rotasjon til Laser Gun

    Hvis du vil legge rotasjon til laserpistolen må vi utføre noen store endringer.


      Re-Strukturering ProjectLaser () -metoden

      Plassering hele treffet gjenkjenningslogikken i ny metode hitTest ().

      Legge til ny uttalelse laser.graphics.clear () i for loop.

      Import uttalelse import flash.events.Event Anmeldelser

      Først skal vi restrukturere ProjectLaser () metoden ved å flytte hele treffet gjenkjenningslogikken i ny metode hitTest ().

      Da skal vi legge laser.graphics.clear () uttalelse før laser.graphics.lineStyle (1, 0xff0000) uttalelse inne for loop av ny metode hitTest (). Dette vil fjerne den gamle projeksjon av laser fra scenen når laserpistol vil begynne å rotere

      La oss se hvordan det vil se ut etter at alle de fire store endringer.
      Offentlig funksjon ProjectLaser (): void { laser = new Sprite (); addChild (laser); //Sett opprinnelsen til laser som sentrum av laserpistol startx = laserGun.x; starty = laserGun.y;} //Hit testpublic funksjon hitTest (): void {for (adjustedDist = 0; adjustedDist < maxDist; adjustedDist ++) {//trigonometri til å sikte laser wrt laserpistol rotasjon endX = laserGun.x + Math.cos (laserGun.rotation * rad) * adjustedDist; Endy = laserGun.y + tak i Math.sin (laserGun.rotation * rad) * adjustedDist; //beregne hit test if (obstacles.hitTestPoint (endX, Endy, true)) {break; }} //Tegn laser laser.graphics.clear (); //Fjerner den gamle laserprojeksjons laser.graphics.lineStyle (1, 0xff0000); laser.graphics.moveTo (startx, starty); laser.graphics.lineTo (endX, Endy);}

      Du spør kanskje hvorfor vi gjorde så store endringer? Den eneste grunnen er ENTER_FRAME hendelsen

      For å søke kontinuerlig rotasjon vi skal legge til en ny metode, LaserGunRotation (evt: Hendelses). Som aktiveres ved ENTER_FRAME hendelse (som betyr det kjøres 24 ganger i sekundet, siden vår bildefrekvens er 24fps). Når denne hendelsen brukes, må du være forsiktig med å legge bare slike egenskaper disse vi ønsker å endre seg over tid. Unngå å sette i de verdier som forblir konstant gjennom henrettelsen

      I vårt tilfelle, hvis du observerer gammel ProjectLaser () metoden, har det:
      laser = new Sprite (); addChild (laser);. //Roter Laser Gun

      Tenk deg hvis du legger over uttalelser i en metode som bruker ENTER_FRAME hendelse; deretter en ny laser Sprite objekt vil bli opprettet og lagt til scenen gjentatte ganger -. 24 ganger hvert sekund

      Dette er helt unødvendig. Derfor omstrukturert vi ProjectLaser () metoden og lagt ny metode hitTest (). Du kan endre navn ProjectLaser () metode for å InitializeLaser () siden det ikke lenger prosjekter laseren. Nå er det bare skaper den tomme holder for laseren og definerer dens utgangspunkt. Projeksjonen er håndtert på en ny metode, hitTest ()

      Nå la oss se den nye metoden LaserGunRotation (evt: Hendelses).. Før det legge til følgende import uttalelse i starten av dokumentet klassen:
      import flash.events.Event;

      Og legge til følgende metode:
      //Roter Laser Gunpublic funksjon LaserGunRotation (evt: Hendelses): void {laserGun.rotation + = 0,5; HitTest ();}

      Også, ikke glem å kalle denne metoden med en ENTER_FRAME hendelse inne konstruktør funksjon som vist nedenfor:
      //Constructorpublic funksjon Laser_HitDetection () {CreateLaserGun (); CreateObstacles (); ProjectLaser (); addEventListener (Event.ENTER_FRAME, LaserGunRotation);}

      Dette setter den opp til å kjøre LaserGunRotation () -funksjonen 24 ganger i sekundet

      Test filmen

      Raketten har allerede penetrert.. skyer. Se den vakre Earth



      Trinn 17:. Legge Kontroll til nøyaktigheten av Hit Detection

      I dette trinnet skal vi legge til en kontroll for å justere nøyaktigheten av treffet gjenkjenning. Dette er viktig siden du ikke trenger den nøyaktige hit påvisning hver gang; du trenger et gjennomsnittlig nivå på treffet gjenkjenning. Dette vil også bidra til å redusere CPU forbruk på tidspunktet for treffet deteksjon

      Vi skal innføre en ny variabel toleranse som:
      Var toleranse: Number = 1;

      Så skal vi endre på. loop tilvekst utsagn som:
      for (adjustedDist = 0; adjustedDist < maxDist; adjustedDist + = toleranse)

      Nå for loop vil se ut:
      for (adjustedDist = 0; adjustedDist < maxDist; adjustedDist + = toleranse) {//trigonometri til å sikte laser wrt laserpistol rotasjon endX = laserGun.x + Math.cos (laserGun.rotation * rad) * adjustedDist; Endy = laserGun.y + tak i Math.sin (laserGun.rotation * rad) * adjustedDist; //beregne hit test if (obstacles.hitTestPoint (endX, Endy, true)) {break; }}

      Dette betyr at i stedet for å se etter en kollisjon på hver piksel i laserlinjen, er vi bare se etter en kollisjon på annenhver piksel, eller hver tredje piksel, etc.

      Senke verdi for "toleranse" vil øke nøyaktigheten av treffet deteksjon men krever mer CPU kraft. Prøv å eksperimentere med forskjellige verdier for "toleranse".

      venner, det er på tide å forlate rakett og åpne fallskjermen. Lande trygt på bakken og begynne å bruke de ovennevnte teknikk i Flash-spill og programmer. Nyt



      Konklusjon:!.

      I denne opplæringen vi i hovedsak så perfekt utnyttelse av hitTestPoint () og en for loop for å lage nøyaktige hit deteksjon uten bruk av komplekse matematiske Anmeldelser

      Denne effekten kan brukes i en sikkerhetstype actionspill hvor kameraer og laserpistoler er påkrevd. Anmeldelser