et tårn forsvar spil i as3:, sigt og skyd

, et tårn forsvar spil i as3:, sigt og skyd,,,,, andel,,,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, hej flash udviklere!i denne forelæsning serie, vi kommer til at gå gennem udarbejdelsen af en meget grundlæggende tårn forsvar spil.i den første del af den serie, vil vi lære at anvende er på spil, give dem mulighed for at tage sigte på en genstand (i dette tilfælde, mus) og gøre dem ild partikler.,,,, endelige resultat forpremiere, når vi afslutter denne forelæsning, vi er nødt til det. en cirkel, så klik til at iværksætte et tårn på det.se, hvordan alle tårne rotere, således at de peger i retning af mus markør.klik, og alle er monteret fyrer en partikel til markøren.,, trin 1: hvad er et tårn forsvar?wikipedia definition beløb det pænt: målet for tårn - spil er at forsøge at holde fjender i at krydse en kort ved at bygge tårnene, der skyder på dem, når de passerer.,,, som i alt væsentligt er det, vi vil udvikle i denne lektion i serie.kan du huske, at vi henviser til tårne som tårne i denne forelæsning. forbandede skat er et godt eksempel på en td kamp, hvis du stadig er usikker.,, trin 2: fælde - ide, før vi begynder at udvikle den kamp, vi skal fælde projektet på vores ide.jeg vil bruge flashdevelop her.hvis du vil læse om, hvordan vi skal fælde projektet om flash udvikle, jeg har læst trin 1 og 2 af denne forelæsning, eller det fuldstændige vejledning til flashdevelop., så du skal have en vigtigste klasse, main. som, med følgende kode:, pakke (import flash.display.sprite; offentlige klasse vigtigste udvider sprite {offentlige funktion main(): ugyldig (}), trin 3: forstår spillet elementer, i denne del, vores kamp vil have følgende spil elementer:,, spil, område: det område, hvor alle spil elementer vil blive placeret., tårn indikation af en art: dette er et sted på spil, defineret til at holde et tårn, det: vores våben i det spil, der kan markedsføres på det placeholders. en kugle og endelig de partikler, der er fire. alle ovennævnte elementer vil blive skabt i den, main.as, undtagen tårne, som vil være et særskilt tårnet, klasse, lad os starte koder nu!,, trin 4: at skabe placeholders, først skal vi skabe en funktion, createturretplaceholder(), som vil skabe og vende os en indikation af en art sprite.der tilføjes følgende til den vigtigste, klasse:, privat funktion createturretplaceholder(): sprite {var indikation af en art: sprite = nye sprite(); //henlede den grafiske var g: grafik = placeholder.graphics; g.beginfill (0xce7822); g.drawcircle (0, 0, 20) g. endfill(); tilbage indikation af en art;}, denne funktion er at oprette en sprite, variable, indikation af en art.så bruger actionscript tegning api - vi skaber de grafiske, som er en simpel cirkel.endelig vender den sprite.,, løntrin 5: at tilføje nogle placeholders, nu skal vi skabe tre placeholders ved hjælp af den tidligere funktion og lægge dem på forskellige holdninger på området.der tilføjes følgende koder i, main(), konstruktøren:, var placeholder1: sprite = createturretplaceholder(); i ovennævnte erklæring, skaber vi en variabel, placeholder1, type, sprite, som modtager en indikation af en art fra ovennævnte, createturretplaceholder(), funktion, placeholder1. x = 200; placeholder1. y = 60; vi holdning en indikation af en art på banen. addchild (placeholder1), og så tilføjer vi en indikation af en art på scenen. med den samme kode, vi kan tilføje yderligere to placeholders til område - så din, main(), funktion skal se sådan ud: offentlig funktion main() {var placeholder1: sprite = createturretplaceholder(); placeholder1. x = 200; placeholder1. y = 60, var placeholder2: sprite = createturretplaceholder(); placeholder2).= 60; placeholder2. y = 260 og var placeholder3: sprite = createturretplaceholder(); placeholder3. x = 350; placeholder3. y = 260 og addchild (placeholder1); addchild (placeholder2); addchild (placeholder3)}, trin 6: det - at skabe den klasse, som jeg nævnte før, det er at være en særskilt klasse.det er, fordi der er behov for særlige egenskaber og metoder til deres egne, og udvides i fremtiden at skabe forskellige slags spir.det er en perfekt kandidat til at blive fastlagt i en særskilt klasse., gå ud og skabe en ny klasse, som hedder, tårnet, udvundet, sprite, i et register, der hedder tårnet.,.det bør have følgende grundlæggende kode:, pakke (import flash.display.sprite; offentlige klasse tårnet udvider sprite {offentlige funktion turret() {}}}, trin 7: tårnet - grafik, nu hvor vi har base struktur af, tårnet, klasse, det næste skridt er at give det en grafik.for at skabe en ny funktion, draw() i klassen.så læg følgende funktion under konstruktøren:, privat funktion draw(): ugyldig (var - g: grafik = this.graphics; g.beginfill (0xd7d700); g.drawcircle (0, 0, 20); g.beginfill (0x800000); g.drawrect (0, 5, 25, 10), g. endfill();}, som du måske har bemærkede i den kode, vi tegner en cirkel og et rektangel med det.det er, hvordan vores tårn kommer til at se.nu ringer vi til denne funktion fra entreprenøren selv. offentlige funktion turret() {draw();}, trin 8: at skabe et spøgelse tårnet, det næste, vi skal gøre, er at vise et spøgelse tårnet, når vi svæver det placeholders, at vi har sat på spil.hvad er et spøgelse tårn?nå, det er bare en gennemsigtig tårn, der fremkommer, når der svæver musen på placeholders, til at fortælle den aktør, som et fyrtårn, kan anvendes der. til at begynde med det, vi har brug for et spøgelse tårnet.gå videre og erklære en variabel for den i de vigtigste, klasse, private var ghost_turret tårn; nu skabe et nyt tårn i, main(), konstruktøren:, ghost_turret = nye turret();, give spøgelset tårnet nogle egenskaber, så det ligner et spøgelse. ghost_turret.alpha = 0, 5; ghost_turret.mouseenabled = falsk; ghost_turret.visible = falske i ovennævnte kode vi lavere opacitet af tårnet for at halvdelen (0,5) og fastsætter, mouseenabled, ejendom i tårnet, falsk, så det spøgelse tårnet ikke modtager nogen mus begivenheder.hvorfor?vi vil se på det senere.og som det spøgelse, det vil være usynlig ved misligholdelse, vi gemmer det. endelig tilføje tårnet for at vise liste:, addchild (ghost_turret), din store, konstruktøren bør se sådan noget, offentlig funktion main() {var placeholder1: sprite = createturretplaceholder(); placeholder1. x = 200; placeholder1. y = 60, var placeholder2: sprite = createturretplaceholder(); placeholder2. x = 60; placeholder2. y = 260 og var placeholder3: sprite = createturretplaceholder(); placeholder3. x = 350; placeholder3. y = 260 og addchild (placeholder1); addchild (placeholder2); addchild (placeholder3); ghost_turret = nye turret(); ghost_turret.alpha = 0, 5; ghost_turret.mouseenabled = falske ghost_turret.visible = falske addchild (ghost_turret)}, hvis du løber den film nu (ctrl + i), er alt hvad du ser, er tre placeholders på scenen.kedeligt, ikke?lad os tilføje nogle interaktivitet.,, trin 9: viser /skjuler de spøgelse tårn, vi ønsker det spøgelse, det skal anføres, når musen svæver over nogen indikation af en art.så lad os lægge mus lyttere for hver indikation af en art i, createturretplaceholder(), funktion, lige før det afkast, indikation af en art, variable, privat funktion createturretplaceholder(): sprite {var indikation af en art: sprite = nye sprite(); //henlede den grafiske var g: grafik = placeholder.graphics; g.beginfill (0xce7822); g.drawcircle (0, 0, 20.); g. endfill(); indikation af en art. addeventlistener (mouseevent.mouse_over, showghostturret, falske, 0, sande); indikation af en art. addeventlistener (mouseevent.mouse_out, hideghostturret, falske, 0, sande); tilbage indikation af en art;}, kode lægger lyttere, mouse_over, og mouse_out begivenheder. næste vi definerer de to kontaktperson funktioner i på samme måde.der tilføjes følgende to funktioner under, createturretplaceholder(), funktion:, privat funktion showghostturret e: mouseevent = null): ugyldig (var - target_placeholder: sprite = e.currenttarget som sprite. ghost_turret. x = target_placeholder. x; ghost_turret. y = target_placeholder. y. ghost_turret.visible = sandt.} privat funktion hideghostturret e: mouseevent = den): ugyldig (ghost_turret.visible = falske},, hideghostturret(), skjuler det spøgelse, tårn, men hvad sker der i, showghostturret, funktion?lad os se., var target_placeholder: sprite = e.currenttarget som sprite, får vi en henvisning til indikation af en art, som mus, er til stede ved, mouseevent, er, currenttarget, ejendom, typecasted, sprite,., ghost_turret. x = target_placeholder. x; ghost_turret. y = target_placeholder. y. ghost_turret.visible = sandt. det er enkelt. vi holdning spøgelset tårn til indikation af en art er cordinates og gøre den synlig.- den film, og du skal se spøgelset tårnet anføres, når der svæver over den placeholders.flot!trin 10: anvender, er vores næste mål er at indsætte et tårn, når en indikation af en art er faldet.vi har brug for en, klik, lytter til indikation af en art.men vi har brug for en, system, variable, som vil holde alle vore tårne, så vi kan henvise dem til enhver tid senere.en i de vigtigste, klasse, private var tårne: array = [], sæt en anden til at lytte til lige under de to foregående lyttere, tilføjede vi i, createturretplaceholder(), funktion:, indikation af en art. addeventlistener (mouseevent.mouse_over, showghostturret, falske, 0, sande); indikation af en art. addeventlistener (mouseevent.mouse_out, hideghostturret, falsk 0, sande); indikation af en art. addeventlistener (mouseevent.click, addturret, falske, 0, sande), erklærer, addturret(), ikke fungerer under, hideghostturret(), funktion:, privat funktion addturret e: mouseevent): tomrum {}, lad os skrive koden for den funktion.der tilføjes følgende kode til, addturret(), funktion, var target_placeholder: sprite = e.currenttarget som sprite; vi får henvisningen til indikation af en art, der blev slået, ligesom vi gjorde i, showghostturret(), funktion, var det tårn = nye turret();, skaber vi et nyt tårn i en variabel, der hedder tårn,,., tårnet. x = target_placeholder. x tårnet. y = target_placeholder. y. næste, vi holdning, tårnet på koordinaterne for det, target_placeholder,., addchild (det); tårne. tryk (det), når det er der, vi lægger det til den trin og skubbe den på nettet. din, addturret, funktion skal se sådan ud i slutningen:, privat funktion addturret e: mouseevent): ugyldig (var - target_placeholder: sprite =e.currenttarget som sprite, var det tårn = nye turret(); tårnet. x = target_placeholder. x tårnet. y = target_placeholder. y. addchild (det); tårne. tryk (det)}, én ting at bemærke her.kan du huske, at vi fastsætter, mouseenabled, tilhører den spøgelse tårnet, falske?hvis vi ikke havde det spøgelse tårnet i mellem indikation af en art og mus ville have fanget det klik begivenhed, for at forhindre, at tilfælde af til indikation af en art.som et resultat heraf, klik, til at lytte, der er knyttet til indikation af en art ville ikke have tilkaldt., du måske ønsker at fjerne, klik, lytter fra indikation af en art.jeg har ikke gjort det her, siden den nye tårnet blokerer enhver klik, - - men hvis du bruger en anden tårnet design er en god idé. det er alt, vi har brug for, at vores spir.prøv at løbe den film, og du vil være i stand til at indsætte tårne på placeholders.,, trin 11: tårnet, for denne forelæsning vil vi gøre kanontårnet skifte ansigt til ansigt med mus.vi holder rotation funktioner i en særskilt metode for, tårnet, klasse.denne metode vil blive kaldt, update(),., lad os tilføje denne metode til tårnet, nu: offentlig funktion update(): ugyldig (var - vinkel: antal = matematik. atan2 (stage.mousey -. y, stage.mousex -. x) /math.pi * 180; this.rotation = vinkel.}, alt, hvad vi gør i det funktion er beregne vinkel på mus fra tårnet og tårnet er vinkel til det.(se trigonometri for flash - udviklere, hvis du ikke er sikker på, hvordan det her fungerer.), men bemærker, at vi ikke har kaldt denne funktion fra alle steder, og så sker der ingenting endnu.denne funktion vil blive kaldt fra spillet loop, at vi definerer den næste.lad os gå!,, trin 12: spillet loop, hvad er en kamp nu?det er en funktion, der er tillægger, enter_frame, omstændigheder og så bliver det opfordrede hvert billede.det er en ajourføring af alle elementer i kamp... i vores sag, tårne.flere detaljer i denne artikel, skabe en funktion, gameloop() under, main(), konstruktøren, hvilket vil være en til at lytte til det, enter_frame, tilfælde af film, privat funktion gameloop e: begivenhed): tomrum {}, nu hvor vi har lytteren funktion er defineret, er vi nødt til at knytte det til de tilsvarende tilfælde.gør vi det, main(), konstruktøren.der tilføjes følgende linje til, main(), funktion: offentlig funktion main() {var placeholder1: sprite = createturretplaceholder(); placeholder1. x = 200; placeholder1. y = 60, var placeholder2: sprite = createturretplaceholder(); placeholder2. x = 60; placeholder2. y = 260 og var placeholder3: sprite = createturretplaceholder(); placeholder3). = 350; placeholder3. y = 260 og addchild (placeholder1); addchild (placeholder2); addchild (placeholder3); ghost_turret = nye turret(); ghost_turret.alpha = 0, 5; ghost_turret.mouseenabled = falske addchild (ghost_turret) fase. addeventlistener (event.enter_frame, gameloop)}, trin 13: ajourføring af alle tårne, lad os sætte en kode i vores gameloop(), funktion. for hver (var -det tårn i tårne) {}, vi iterate over, tårne, system, der er henvisninger til alle tårne på scenen, ved hjælp af en for hver... i loop. for hver (var det tårn i tårne) {tårnet. update();}, og ringe til, update(), funktion hvert tårn.og vi er færdige.hvis du løber den film nu, skal du være i stand til at indsætte tårne, som altid står over for mus.sådan her:,, trin 14: at der er skudt, vores næste mål er at gøre er at skyde kuglerne.på hvem?for resten, vi skal skyde mod ethvert punkt, er vi ind på scenen.vi gør det sådan her:,, tilføje et klik til at lytte til scenen. iterate over alle, er i ovennævnte lytter. beregnes ud fra den klikkede til tårnet, skabe en ny kugle, og det i den pågældende retning.,, lad os erklære lytter funktion ved navn, - tilføje funktion, vigtigste, klasse:, privat funktion skyde e: mouseevent): tomrum {}, og så lægger det over til at lytte til den, klik, tilfælde af fase i, main(), konstruktøren:, fase. addeventlistener (mouseevent.click, skyd) fase. addeventlistener (event.enter_frame, gameloop)},, trin 15: at skabe kugle, før vi går over til at skrive koden for at skyde på, shoot(), funktion, vil vi definere en ny funktion for at skabe en kugle, ligesom viså for at skabe en indikation af en art.så læg følgende fungere under, createturretplaceholder():, privat funktion createbullet(): sprite (var - kugle: sprite = nye sprite(); //henlede den grafiske var g: grafik = bullet.graphics; g.beginfill (0xeeeeee); g.drawcircle (0, 0, 5); g. endfill(); tilbage kugle.}, ikke meget her.vi skaber en ny, sprite, gøre et offwhite farve cirkel indeni, og returnerer det.lad os fortsætte med at definere vores, shoot(), funktion, trin 16: hvordan til at skyde?tid til at tilføje en kode til, shoot(),. for hver (var det tårn i tårne) {}, vi iterate over alle tårne på scenen med for hver... i en sløjfe, var new_bullet: sprite = createbullet(); nu for hver tårn, skaber vi en kugle. ved hjælp af den funktion, skabte vi tidligere. new_bullet.rotation = tårnet. rotation, vi lagre værdien af tårnet rotation ejendom i kugle rotation.hvorfor?- roterende kugle er ikke, hvad vi ønsker.kuglen skal fortsætte i retning bestemmes ved tårnet, og til det formål har vi brug for kanontårnet rotation værdi fra det øjeblik, de skød.vi opbevarer det så er kuglen rotation til fremtidig brug. new_bullet. x = tårnet. x + matematik. - (new_bullet.rotation * math.pi /180) * 25 *; new_bullet. y = tårnet. y + matematik. synd (new_bullet.rotation * math.pi /180) * 25 *; disse to linjer, der er kuglen indledende holdning, som er 25 pixels væk fra tårnet i retning af står over for (husk, rotation, ejendom).igen, læse op på trigonometri, hvis denne er ukendt for dig. addchild (new_bullet), og som den sædvanlige sidste skridt, vi lægger den kugle på scenen er display - liste. det er din, shoot(), funktion, skal se ud:, privat funktion skyde e: mouseevent): ugyldig (for hver (var det tårn i tårne) (var - new_bullet: sprite = createbullet(); new_bullet.rotation = turret.rotation; new_bullet. x = tårnet. x + matematik. - (new_bullet.rotation * math.pi /180) * 25 *; new_bullet. y = tårnet. y + matematik. synd (new_bullet.rotation * math.pi /180) * 25 *; addchild (new_bullet)), hvis du løber du spil nu og klik på nogen indikation af en art, tårnet vil få sat - ups...vi har et problem her.en ekstra kugle også bliver skabt med tårnet.lad os ordne det her. gå 17: hvorfor har det ekstra kugle ud?for at forstå det, vi er nødt til at forstå, hvis udbredelse i as3. enhver begivenhed, der bliver skabt passerer gennem tre faser:, at fange, mål, og at boble.begivenhederne begynder fra den øverste modervirksomhed for den målsætning, som genereres tilfælde.den går gennem alle de indre barn elementer, som er, at fange, fase.så når de egentlige mål, som er målet, fase.så tilfælde går tilbage til toppen, der passerer gennem samme elementer i bakgear, som er den, der er fase.i den fase, der, alle de elementer, der er defineret for formerings - tilfælde får lytteren udløst og deres lyttere gennemføres. vi har et forhold til at lytte, bundet til den fase, og placeholders.men placeholders er også børn af scenen.så når vi klik den indikation af en art, en, klik, begivenhed bliver frembragt med målet som indikation af en art.tilfælde propagates fra fase til indikation af en art - - fange, fase.den ankommer til indikation af en art og dens, klik, kontaktperson, addturret(), funktion, bliver gennemført, og vi har et tårn på scenen.nu til den begivenhed, propagates baglæns -, boble, fase - og når det når scenen igen det finder en, klik, til at lytte til det, der bliver henrettet.som et resultat heraf er, shoot(), funktion bliver henrettet, og en kugle er føjet til den scene. så det problem, men at løse det?hvad vi skal gøre, er at stoppe tilfælde er yderligere spredning, når det når målet.det betyder i, addturret(), stopper vi tilfælde er formering.så gå videre og tilføje en linje i slutningen af addturret():, privat funktion addturret e: mouseevent): ugyldig (var - target_placeholder: sprite = e.currenttarget som sprite, var det tårn = nye turret(); tårnet. x = target_placeholder. x tårnet. y = target_placeholder. y. addchild (det); tårne. tryk (det); f. stoppropagation();}, den linje, der er tilsat stopper tilfælde er udbredelse, og at det ikke når op på den scene.for en mere omfattende kendskab til tilfælde rammer i actionscript 3,0 læse as3 101 post.lad os fortsætte spillet.,, gå 18: at kugle, vi skaber den kugle på at trykke på scenen, men det ikke bevæger sig stadig.vores næste skridt er at tilføje en begivenhed til at lytte til den kugle, der bliver ved med at udforme og bevæger sig.vi erklærer en variabel for bullet hastighed.tilføje den variabel, hvor de andre variabler angives: private var ghost_turret tårn; private var tårne: array = [] private var bullet_speed: uint = 3, tilføjes følgende efter funktion til de vigtigste, klasse:, privat funktion movebullet e: begivenhed): ugyldig (var - kugle. sprite = e.currenttarget som sprite; kugle. x + = matematik. - (bullet.rotation * math.pi /180) * bullet_speed; kugle. y + = matematik. synd (bullet.rotation * math.pi /180) * bullet_speed;}, hvad vi gør i denne til at lytte, er:,, få en henvisning til den kugle, der lytter blev udløst. (kuglen holdning, bullet_speed, beløb i retning af kuglen er rotation, endelig lægger den lytter vi har lige skabt til, enter_frame, tilfælde af - 1630 bullet i, shoot(), funktion:, privat funktion skyde e: mouseevent): ugyldig (for hver (var det tårn i tårne) (var - new_bullet: sprite = createbullet(); new_bullet.rotation = turret.rotation; new_bullet. x = tårnet. x + matematik. - (new_bullet.rotation * math.pi /180) * 25 *; new_bullet. y = tårnet. y + matematik. synd (new_bullet.rotation * math.pi /180) * 25 *; new_bullet. addeventlistener (event.enter_frame, movebullet, falske, 0, sande); addchild (new_bullet)), hvis du tester du spil nu, du burde se kugler bevæger sig, når man klikker på scenen.men hvis du ser godt efter, vil de bemærke, at kuglerne videre engang skabt... selv efter de ud af den synlige scene område.vores næste skridt er at ødelægge de kugler, så snart de forlade filmen grænser.,, skridt 19: at ødelægge kugler, tilføje følgende kode i slutningen af movebullet(), funktion:, privat funktion movebullet e: begivenhed): ugyldig (var - kugle: sprite = e.currenttarget som sprite; kugle. x + = matematik. - (bullet.rotation * math.pi /180) * bullet_speed; kugle. y + = matematik. synd (bullet.rotation * math.pi /180) * bullet_speed; hvis (kugle. x < 0



Previous:
Next Page: