når målet med en dødelig målsøgende missil

, ramte målet med en dødelig målsøgende missil,,,,, 1,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie, ringede du? alvor i actioncircular forslag i as3: en bevægende kredsløb, denne forelæsning vil guide dig gennem tilføjelse af dødbringende nøjagtige missiler til arsenal af din næste kamp.,,,, endelige resultat se, lad os se på det endelige resultat, vi arbejder hen imod:,, trin 1: oprettede fia - dokument, skabe en ny flash - dokument, der er fastsat for actionscript 3,0.jeg vil bruge de dimensioner, 600x400 og billedhastigheden 30 fps - ordningen.redde fil med navnet på dit valg.,, trin 2: skabe et dokument, klasse, ud over det ned, er vi også nødt til at skabe et dokument, klasse.skabe en ny actionscript fil, og tilføje denne kode:, pakke (import flash.display.sprite; offentlige klasse vigtigste udvider sprite {offentlige funktion main() (}), medmindre denne sag i det samme register, som vores fla navn det  , main.,.,, trin 3: forbindelsen mellem de vigtigste, klasse med fia med henblik på at udarbejde kodeksen fra de vigtigste, klasse, er vi nødt til at forbinde det med fla på  , egenskaber, panel af ned ved siden af  , klasse, og angiv navnet på det dokument,   klasse, i dette tilfælde vigtigste,.,, så redde ændringer den fla, trin 4: udarbejde et missil, vi har brug for et missil grafisk skal vises i forbindelse med at skyde.du må indføre en bitmap eller trække en form, der blinker.jeg skal bruge en lille form i dette eksempel.,, hvad der er vigtigt her, er, at du er nødt til at gøre det - punkt lige til højre, da det er oprindelsen for rotation.- 0 ° betyder pegende lige til højre, - 90 °: opad, 90 ° betyder nedad, og 180 ° punkter til venstre.senere vil vi blive nødt til at skifte missiler i henhold til den retning,.,, løntrin 5: skabe en movieclip for missil, når du har den missil grafisk, udvælge og presse, f8, til at skabe en film magasin.hedder det "missil", sørg for at den registrering, der er centrum, og sæt kryds i den "eksport til actionscript" afkrydsningsfelt, ender du med et missil movieclip i biblioteket.,, hvis du har et missil eksempel på scenen, slette det.vi vil tilføje missilet movieclip af kode.,, trin 6: mål, den første ting et målsøgende missil har brug for at vide, er, hvor målet er lokaliseret.vi skal fastsætte en rotation af missiler i henhold til den stilling, den mus markør.lad os arbejde sammen med den, enterframe, begivenhed for en konstant rotation opdatering., tilføje en, missiler, eksempel på scenen, jeg lægger det i centrum (300 200).dernæst beregne afstanden fra missilet til mus markør (jeg opbevarer det i variabler, targetx, og targety,).endelig er missilet er vinkel vil være den tangent til begge punkter (, targetx,, targety,).det resultat, man kan få, er i radianer, men rotation arbejder i grader, så du bliver nødt til at gøre omstilling ved at multiplicere med 180 /pi.(se hvorfor, tjek denne artikel.), import flash.events.event; offentlige klasse vigtigste udvider sprite (private var missil: missil = nye missile(); offentlig funktion main() {addchild (missil) missil. x = 300; missil. y = 200; addeventlistener (event.enter_frame, playgame)} privat funktion playgame (ref.: tilfælde): ugyldig (var - targetx: int = mousex - missil. x, var targety: int = mousey - missil. y. missile.rotation = matematik. atan2 (targety, targetx) * 180 /math.pi;}}, ikke sikker på hvad, matematik. atan2(), er der for?tjek denne artikel om trigonometri.,, hvis du offentliggør (ctrl + i) det dokument, vi skal have noget som dette:,,, flyt din mus i nærheden af missilet ser det rotere.,,, trin 7: søge, vi har rotation, nu har vi brug for bevægelse.missilet er at finde målet, uanset om det er en konstant eller et mål i bevægelse.det, vi gør, er at beregne den frie bevægelighed i henhold til den nuværende rotation af missilet.lad os fastsætte en værdi for hastighed og missilet jage mus markør. vi vil omfatte et par nye variabler for at beregne hastigheden (, vx, vy,).når de missiler peger mod højre, dets vinkel er lavere end 90 ° og højere end - 90 °, så det er altid lavere end den absolutte værdi på 90 °.når den peger mod venstre, dets vinkel er en absolut værdi, som er højere end 90 °.dette vil afgøre, vx i henhold til hastighed, vy, vil forskellen, hastighed og vx,., private var hastighed: int = 10; offentlig funktion main() {addchild (missil) missil. x = 300; missil. y = 200; addeventlistener (event.enter_frame, playgame)} privat funktion playgame (ref.: begivenhed): ugyldig (var - targetx: int = mousex - missil. x, var targety: int = mousey - missil. y. missile.rotation = matematik. atan2 (targety, targetx) * 180 /math.pi; //hastighed i x er i forhold til den vinkel, når det er 90 & grader, eller - 90 & grader, vx skal være 0.var vx: antal = hastighed * (90 - matematik. abs (missil. skift) /90; var vy: antal; //hastighed i y er forskellen mellem hastighed og vx.hvis (missile.rotation < 0) vy = - hastighed + matematik. abs (vx); //går opad.andre vy = hastighed - matematik. abs (vx); //går nedad.missil. x + = vx missil. y + = vy.}, får du et missil jagter din markør., kan du bruge en anden hastighed, hvis du vil.,, trin 8: skabe et missil, missiler og kom ikke ud af den blå luft, de er skudt ud af missiler.lad os lave en movieclip, der repræsenterer en kanon (jeg vil bruge en simpel rektangel) og navn, kanon.jeg er nødt til at tilføje en, kanoner, f.eks. ved kode, så jeg vil holde det stadium, tom.,, trin 9: skyd nu, i stedet for at tilføje et missil, jeg er bare nødt til at tilføje en kanon, og et missil, bliver tilføjet på den kanon holdning, når jeg klikker på scenen..vi kan tilføje en boolean - til at kontrollere, om missilet er blevet skudt, og en ny funktion for at skyde efter det klik., import flash.events.mouseevent; offentlige klasse vigtigste udvider sprite (private var missil: missil = nye missile(); private var hastighed: int = 10; private var kanon: kanon = nye cannon(); private var missileout: boolean = falske; //har missil skudt?offentlig funktion main() {addchild (kanoner); kanon. x = 50 kanoner. y = 380; addeventlistener (event.enter_frame, playgame) fase. addeventlistener (mouseevent.click, skyd)} privat funktion playgame (ref.: begivenhed): ugyldig (hvis (missileout) (var - targetx: int = x mousex - missil. og var targety: int = mousey - missil. y. missile.rotation = matematik. atan2 (targety, targetx) * 180 /math.pi; var vx: antal = hastighed * (90 - matematik. abs (missil. skift) /90; var vy: antal; hvis (missile.rotation < 0) vy = - speed + matematik. abs (vx); andre vy= hastighed - matematik. abs (vx) missil. x + = vx missil. y + = vy;}} privat funktion skyde (ref.: mouseevent): ugyldig (hvis (!missileout) (addchild (-); swapchildren (missil - kanon); //missil kommer ud fra bag kanonen missileout = sandt; missil. x = kanon. x missil. y = kanon. y.}}, det er hvad du får, det ser ikke rart.vi er nødt til at få kanonen roterer såvel eller tvinge missilet til at gå op, lige efter at være skudt.eftersom mulighed er den nemmeste tilgang, vi tager mulighed.,, trin 10: mindre præcision for bedre ud, hvis den kanon er lodret, forventer vi, at missilet til at iværksætte opad, og så få på vej mod målet.den holdning, som jeg kan bruge til at opnå dette, er at give de missiler fra vinkel - 90 ° (opad) og glat roterer kan komme tilbage på sporet med mus markør.vi kan tilføje en lettelse, variabel til bestemmelse af havet eller skarphed af rotation.så vil vi skabe en anden variabel til at holde styr på de faktiske rotation, der peger direkte til målet, mens missilet er rotation vil ændre sig i henhold til den lette, sætter vi (lette = 1 vil opføre sig sådan før, noget højere, vil blive en roligere tur.), eftersom halvdelen af rotation værdier negativ, i nogle tilfælde, vi bliver nødt til at beregne dem mod 360, for at få den faktiske forskel mellem målet vinkel og missilet er rotation, private var let: int = 10; offentlig funktion main() {addchild (kanoner); kanon. x = 50 kanoner. y = 380; addeventlistener (event.enter_frame, playgame); stadie. addeventlistener (mouseevent.click, skyd)} privat funktion playgame (ref.: begivenhed): ugyldig (hvis (missileoris) (var - targetx: int = mousex - missil. x, var targety: int = mousey - missil. y, var rotationen: int = matematik. atan2 (targety, targetx) * 180 /math.pi; hvis (matematik. abs (rotation - missil. skift) > 180) (hvis (rotation > 0 & & missile.rotation < 0) missile.rotation - = (360 - rotation + missil. skift) /lette; andre, hvis (missile.rotation > 0 & & rotation < 0) missile.rotation + = (360 - rotation + missil. skift) /lette;} andre, hvis (rotation < missil. skift) missile.rotation - = matematik. abs (missile.rotation - rotation) /lette; andre missile.rotation + = matematik.bs (rotation - missil. skift) /lette; var vx: antal = hastighed * (90 - matematik. abs (missil. skift) /90; var vy: antal; hvis (missile.rotation < 0) vy = - hastighed + matematik. abs (vx); andre vy = hastighed - matematik. - (vx) missil. x + = vx missil. y + = vy;}} privat funktion skyde (ref.: mouseevent): ugyldig (hvis (!missileout) (addchild (-); swapchildren (missil - kanon); //missil kommer ud fra bag kanonen missileout = sandt; missil. x = kanon. x missil. y = kanon. y. missile.rotation = - 90; //missiler starter opad), tjek det ud. se, hvad der sker, når du flytter din mus af stg, og hvordan den er forskellig fra den foregående, f.eks.,, trin 11: missilet rammer, missil eksploderer, foruden -, missil - film klip, vi har brug for en eksplosion animation.i mit tilfælde gør jeg en særskilt movieclip med en simpel mellem af en cirkel, der udvider sig.jeg er eksporterende det som en eksplosion.presse, o, til at udvælge, ovale, værktøj, og hold skift, men gør det for at få en cirkel.,, for en bedre visuel effekt, vil jeg sætte den cirkel, inden for en anden film klip af sine egne, og give det en, med skrå, filter for at få en mørkere farve på bunden, og en lysere farve på toppen.næste gang, vil jeg gå til ramme 10 og presse, f6, til at skabe en, keyframe, så right-click mellem ramme 1 og 10 og skabe en klassisk mellem dem.tilbage på ramme 10, presse, q, at udvælge de frie omdanne redskab, og udvider kredsen.,,, skabe en klassisk mellem, at ramme 20, vil jeg tilføje, tåge, filtervirkning., endelig gør det, forsvinder i en klassisk mellem ramme 30 med en. alpha, farve, til 0.,, trin 12: rydde op på scenen, eksplosionen animation skal fjernes, når den er færdig, eller vil det loop på ubestemt tid.tilføjelse af et nyt lag og presse, f6, på det sidste billede, så tryk, f9, åbne, aktioner, panel, og tilføje denne kode:, stop(); < br /> forældre. removechild (det), vil det gøre det, eksplosion, f.eks. fjerne sig efter aktivering er gjort.,, trin 13: eksploderer, når de, missil, opfylder markør, så erstatter vi den med en eksplosion, f.eks.vi er bare nødt til at tilføje en ny betinget af, playgame(), funktion, privat funktion playgame (ref.: begivenhed): ugyldig (hvis (missileout) (hvis (missil. hittestpoint (mousex, mousey)) (var - eksplosion: eksplosion = nye explosion(); addchild (eksplosion, eksplosion. x, x = missil.; eksplosion. y = missil. y. removechild (-); missileout = falske} andre {var targetx: int = mousex - missil. x, var targety: int = mousey - missil. y, var rotationen: int = matematik. atan2 (targety, targetx) * 180 /math.pi; hvis (matematik. - (rotation - missil. skift) > 180) (hvis (rotation > 0 & & missile.rotation < 0) missile.rotation - = (360 - rotation + missil. skift) /lette; andre, hvis (missile.rotation > 0 & & rotation < 0) missile.rotation + = (360 - rotation + missil. skift) /lette;} andre, hvis (rotation < missil. skift) missile.rotation - = matematik. abs (missile.rotation - rotation) /lette; andre missile.rotation + = matematik. abs (rotation - missil. skift) /lette; var vx: antal = hastighed * (90 - matematik. abs - missil. skift) /90; var vy: antal; hvis (missile.rotation < 0) vy = - spe -ed + matematik. abs (vx); andre vy = hastighed - matematik. abs (vx) missil. x + = vx missil. y + = vy.}), se:,, trin 14: noget andet at sprænge, jagter mus markør var underholdende, men det er meningsløst i en kamp, er vi nødt til at gøre det til et mål.jeg vil gøre en masse kredse til at danne en, mål, film, klip.,, trin 15: skyd målet, nu kan vi tilføje en, mål, f.eks. missilet til en mere håndgribeligt mål.så vi vil erstatte enhver henvisning i mus markør for målets position.også, vil vi ikke være test for et mord, men en genstand, private var mål: mål = nye target(); offentlig funktion main() {addchild (kanoner); kanon. x = 50 kanoner. y = 380; addeventlistener (event.enter_frame, playgame) fase. addeventlistener (mouseevent.click, skyd); addchild (target); målet. x = 550 og mål. y = 50) privat funktion playgame (ref.: begivenhed): ugyldig (hvis (missileout) (hvis (missil. hittestobject (target)) (var - eksplosion: eksplosion = nye explosion(); addchild (eksplosion, eksplosion. x = missil. x; eksplosion. y = missil. y. removechild (-); missileout = falske}andet (var - targetx: int = mål. x - missil. x, var targety: int = mål. y - missil. y, var rotationen: int = matematik. atan2 (targety, targetx) * 180 /math.pi; hvis (matematik. abs (rotation - missil. skift) > 180) (hvis (rotation > 0 & & missile.rotation < 0) missile.rotation - = (360 - rotation + missil. skift) /lette; andre, hvis (missile.rotation > 0 & & rotation < 0) missile.rotation + = (360 - rotation + missil. skift) /lette;} andre, hvis (rotation < missil. skift) missile.rotation - = matematik. abs (missile.rotation - rotation) /aese; andre missile.rotation + = matematik. abs (rotation - missil. skift) /lette; var vx: antal = hastighed * (90 - matematik. abs (missil. skift) /90; var vy: antal; hvis (missile.rotation < 0) vy = - hastighed + matematik. abs (vx); andre vy = hastighed - matematik. abs (vx) missil. x + = vx missil. y + = vy.}) privat funktion skyde (ref.: mouseevent): ugyldig (hvis (!missileout) (addchild (-); swapchildren (missil - kanon); //missil kommer ud fra bag kanonen missileout = sandt; missil. x = kanon. x missil. y = kanon. y. missile.rotation = - 90; //missiler starter opad), hittestobject(), metode faktisk kun kontrol af en overlapning mellem den afgrænser kasser af to genstande (dvs. den blå kasse, der opstår, når man trykker på et tilfælde af formålet i fase), så pas på. det er ikke pixel perfekt kollision påvisning.men det virker fint her. kan du prøve at målet på forskellige steder, samt den kanon. trin 16: mål i bevægelse, vi har allerede set, at missilet vil jage et bevægeligt mål, såsom mus markør, så lad os gøre det, mål, f.eks. flyt en lille. det er ikke realistisk fysik, jeg vil bare gøre målet hopper vertikalt.jeg henter et referencepunkt, som jorden, og tilføje en tyngdekraft værdi at påvirke målet.og for at gøre det mere dynamiske, jeg vil øge missilet hastighed på 15. sal, private var: int = 385 og private var tyngdekraften: antal = 0, 5; private var targetvy: antal = 0; //nuværende vertikal hastighed for målgruppen funktion main() {addchild (kanoner); kanon. x = 50; kanon. y = 380; addeventlistener (event.enter_frame, playgame) fase. addeventlistener (mouseevent.click, skyd); addchild (target); målet. x = 550 og mål. y = 50) privat funktion playgame (ref.: begivenhed): ugyldig (hvis (missileout) (hvis (missil. hittestobject (target)) (var - eksplosion: eksplosion = nye explosion(); addchild (eksplosion, eksplosion. x = x; explos missil.ion. y = missil. y. removechild (-); missileout = falske} andre {var targetx: int = mål. x - missil. x, var targety: int = mål. y - missil. y, var rotationen: int = matematik. atan2 (targety, targetx) * 180 /math.pi; hvis (matematik. abs (rotation - missil. skift) > 180) (hvis (rotation > 0 & & missile.rotation < 0) missile.rotation - = (360 - rotation + missil. skift) /lette; andre, hvis (missile.rotation > 0 & og amp; rotation < 0) missile.rotation + = (360 - rotation + missil. skift) /lette;} andre, hvis (rota(< missil. skift) missile.rotation - = matematik. abs (missile.rotation - rotation) /lette; andre missile.rotation + = matematik. abs (rotation - missil. skift) /lette; var vx: antal = hastighed * (90 - matematik. abs (missil. skift) /90; var vy: antal; hvis (missile.rotation < 0) vy = - hastighed + matematik. abs (vx); andre vy = hastighed - matematik. abs (vx) missil. x + = vx missil. y + = vy;}} targetvy + = alvor; målet. y + = targetvy; hvis (målet. y > gulv) (mål. y = sal. targetvy = - 18), hvis du offentliggør det nu.du burde få et mål i bevægelse.,, indgåelse, om du vil have en nøjagtig målsøgende missil, eller ville du foretrække en gnidningsløs animation, du kan få begge resultater baseret på dette eksempel.nu har du et nyt våben til at tilføje, i jeres arsenal, måske kunne du få en orm som spil, eller endda bruge algoritmen på noget andet end et missil, som nogle underlige myg, der følger efter deres karakter. jeg håber, du har fundet denne forelæsning nyttige.tak for det!,

Create a .FLA document
Link the Main class with the FLA
Draw a missile shape or import a missile bitmap.
Create a MovieClip out of the missile you drew.
Missile MovieClip in the Library.
Cannon MovieClip in the Library.
The circle inside its own Movie Clip with a Bevel filter.
Enlarge the circle in a Classic Tween.
Add a Blur filter in a Classic Tween.
Alpha color effect set to 0 in a Classic Tween.
The Explosion instance will remove itself.
Create and export a Target Movie Clip.



Previous:
Next Page: