skaber spøgelser, der følger i dine fodspor

, som skaber spøgelser, der følger i dine fodspor,,,,, andel,,,,,,,, 4,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, vej efter er et simpelt koncept til at forstå: objektet bevæger sig fra a til b, punkt c, og så videre.men hvad, hvis vi ønsker, at vores mål med at følge den vej, den aktør, som spøgelser i racerløb spil?i denne lektion, jeg vil vise dig, hvordan at opnå dette med waypoints i as3.,,,, det endelige resultat forpremiere, tryk og omvendt, så brug den pil nøgler til at flytte rundt.tryk på plads til at skifte til et spøgelse, som vil følge den vej, du har skabt, logikken bag vej efter, hvis den spiller tricks 4 enheder tilbage og 2 enheder fra vores udgangspunkt.for vores spøgelse ender på samme sted, skal også flytte 4 enheder tilbage og 2 enheder fra samme udgangspunkt.lad os sige vores spiller bevæger sig med en hastighed på 2; for den vej, efter at forblive præcis vores spøgelse vil også have en hastighed på 2. hvad hvis vi beslutter at tage en pause, spiller, inden vi fortsætter?den mest indlysende løsning for spøgelse til at holde styr på deres nøjagtige placering hver tik -, men dette vil indebære opbevaring af en masse data.i stedet for, hvad vi vil gøre, er blot at opbevare data, hver gang de spiller presser forskellige, nøgler, så hvis de spiller bevæger sig ikke for ti sekunder, vi gemmer den samme mængde data, som om de spiller flyttet til et halvt sekund. for denne teknik til at arbejde, vores spøgelse skal overholde følgende regler:,, spøgelset og aktør har samme udgangspunkt, spøgelset skal følge samme vej som aktør, spøgelset bør bevæge sig med samme hastighed som spiller. det spøgelse er opbevarer den nuværende tidspunkt, hver gang deres forslag ændringer.,, trin 1: oprettelse, start ved at skabe en ny flash - fil (actionscript 3, 0).sæt den bredde, 480, højden til 320 og billeder pr. sekund til 30.lad lyset farve som hvide og redde den fil, creatingghosts. fia,; endelig fastsat sin klasse, creatingghosts,.,, før vi bevæger os ind i de klasser, er vi nødt til at skabe et par movieclips.start ved at trække to separate 20px pladser uden et slagtilfælde.konvertere den første udfylde en movieclip, at dets registrering til centret, at nævne den, spiller, og at eksportere det til actionscript med klasse navn, spiller.nu gentager den samme proces, bortset fra at erstatte betegnelsen med spøgelse, og klasse, spøgelse.fjerne disse movieclips fra scenen, skabe deres dokument klasse med følgende kode:, pakke (import - flash. udstilling. *; import flash. begivenheder. *; offentlige klasse creatingghosts udvider movieclip {offentlige var spiller: spiller = nye player(); offentlig funktion creatingghosts() {addchild (aktør)}}}, selvforklarende og vores næste skridt vil være at oprette spiller klasse:, pakke (import - flash. udstilling. *; import flash. begivenheder. *; import flash.geom.point; import flash.ui.keyboard; import flash.utils.timer; import flash.utils.gettimer; offentlige klasse spiller udvider movieclip {offentlige var startpos: punkt; offentlige var starttime: int; offentlige var hastighed: antal = 2. offentlige var currentlife: int; offentlige var keypressleft: boolean = falske offentlige var keypressright: boolean = falske offentlige var keypressup: boolean = falske offentlige var keypressdown: boolean = falske offentlig funktion player() {}}}, de første tre variabler anvendes til at hjælpe med at opfylde de regler, startpos, er vores udgangspunkt, starttime, er den tid, når en spiller blev føjet til det stadium, og hastighed, er vores kurs bevægelighed., currentlife, er en tilføjelse, der anvendes til at kontrollere, hvor mange gange de spiller døde, derefter hver vej, lagres og kan opnås ved, at værdi.de sidste fire variabler anvendes til at kontrollere centrale pressere., det er tid til at skabe det spøgelse, klasse:, pakke (import - flash. udstilling. *; import flash. begivenheder. *; import flash.geom.point; import flash.utils.gettimer; import flash.utils.timer; offentlige klasse spøgelse går movieclip (statisk offentlig var waypoints: array = nye array(); statiske offentlige var gange: array = nye array(); offentlige var jeg: int = 0, offentlige var starttime: int; offentlige var hastighed: antal = 2. offentlige var selectedlife: int; offentlig funktion ghost() (}), to statiske variabler, waypoints, og gange, vil blive brugt til at oplagre arrays; den første vil opbevare koordinater for deres holdninger, når de spiller ændringer bevægelse, og den anden vil opbevare than tidspunkter, hvor hver enkelt ændring har fundet sted.de andre variabler svarer fra spiller, klasse.,, trin 2: starter den aktør, som spiller er konstruktøren tilføjes følgende linje:, addeventlistener (event.added_to_stage, lokalitet), næste skabe, init(), funktion: offentlige funktion lokalitet (e: begivenhed) {}, først skal vi for at opnå det, starttime, og få en ny tid system til det spøgelse, gange vifte.- det er lidt forvirrende, spøgelset har flere gang arrays, således at det kan håndtere flere liv i fremtiden.), starttime = flash. utils. gettimer(); spøgelse. gange. tryk (det nye system); currentlife = ghost.times.length - 1; spøgelse. gange [currentlife]. tryk (flash. utils. gettimer() - starttime);,, starttime, er fastsat til den nuværende tidspunkt (en værdi i millisekunder); vi tilføjer et nyt barn system til spøgelse er gange system. vores, currentlife, er fastsat til indeks for det nye system, og vi trykker på den tid, der er gået i denne funktion, at det første element i dette nye system. nu har vi oprettet udgangsposition:, startpos = det nye punkt (stage.stagewidth/2, fase. stageheight /2); dette. x = startpos. x. y = startpos. y. spøgelse. waypoints. tryk (det nye system).spøgelse. waypoints [currentlife]. tryk (startpos), vores udgangspunkt er fastsat til midten af den fase, vi omrokere vores spiller for oprindelse; et nyt system føjes til den, waypoints, array i det spøgelse, klasse, og den første position, er presset til det system, så på. i det øjeblik, spøgelse. gange [0] [0], indeholder en række lige siden stg blev oprettet (nul), og spøgelse. waypoints [0] [0], indeholder et punkt, der er fastsat til midten af scenen. målet er, at kode, så hvis der, efter at et øjeblik, spiller presser en nøgle, så, ghost. gange [0] [1], fastsættes til 1000 og spøgelse. waypoints [0] [1], vil være endnu et punkt, og igen sætte til center (fordi de spiller, vil ikke have flyttet endnu.når en spiller slipper det vigtige (eller til en anden), spøgelse. gange [0] [2], vil blive fastsat på nuværende tidspunkt, og ånd. waypoints [0] [2], vil være et punkt, der svarer til deres stilling på det tidspunkt, her er den. tre tilfælde lyttere:, addeventlistener (event.enter_frame, enterframe) fase. addeventlistener (keyboardevent.key_down, keydown) fase. addeventlistener (keyboardevent.key_up, keyup), trin 3: de vigtigste begivenheder, for lad os ignorere enterframe og fokusere på de centrale pressere. offentlige funktion keydown e: keyboardevent) (hvis (e.keycode = = keyboard.left & & keypressleft = = falske) (updatewaypoints(); keypressleft = sandt.} andre, hvis (e.keycode = = keyboard.right & & keypressright = = falske) (updatewaypoints(); keypressright = sandt.} hvis (e.keycode = = keyboard.up & & keypressup = = falske) (updatewaypoints(); keypressup = sandt.} andre, hvis (e.keycode = = keyboard.down & & keypressdown = = falske) (updatewaypoints(); keypressdown = sandt.} hvis (e.keycode = = tastatur. rummet) (destroy();}}, bare et par enkle, hvis udtalelser for at forhindre, at insekter i centrale pressere, og to nye funktioner, som er blevet kaldt., updatewaypoints(), bliver hver gang nye punkter og gange bliver presset til det spøgelse arrays, og destroy(), bruges til at fjerne den aktør, og tilføje det spøgelse til scenen.men før vi går til disse funktioner, lad os afslutte den centrale presse funktioner. offentlige funktion keyup e: keyboardevent) (hvis (e.keycode = = keyboard.left & & keypressleft = = sand) (updatewaypoints(); keypressleft = falske} andre, hvis (e.keycode = = keyboard.right & &. keypressright = = sand) (updatewaypoints(); keypressright = falske} hvis (e.keycode = = keyboard.up & & keypressup = = sand) (updatewaypoints(); keypressup = falske} andre, hvis (e.keycode = = keyboard.down & & keypressdown = = sand) (updatewaypoints(); keypressdown = falske}}, denne gang gør vi det modsatte: de variabler, der er falsk, når nøglen er løsladt og waypoints opdateres. jeg vil udarbejde mere detaii. om, hvad der sker mellem disse funktioner.hver gang du trykker på en central waypoints (positioner og - tider er opdateret, så hvis du trykker på en anden til at medføre ændringer på et punkt, og den tilsvarende tid, tilsættes det spøgelse arrays., men hvad sker der, hvis de beslutter at få frigivet en central aktør og forårsager forandring igen?- vi højde for det ved at ajourføre waypoints (positioner og gange igen.hvis det ikke var gjort det spøgelse, ikke ville være i stand til at tage højde for 90 graders bliver; i stedet ville det gå i en vinkel på det næste punkt,.,, trin 4: ajourføring og ødelægger vores, updatewaypoints(), funktion er forholdsvis enkelt, da det består af en kode, som vi allerede har skrevet: offentlig funktion updatewaypoints() {spøgelse. gange [currentlife]. tryk (flash. utils. gettimer() - starttime); spøgelse. waypoints [currentlife]. tryk (det nye punkt (. x. y)}, destroy(), funktion er lige så enkelt!waypoints er ajourført, et spøgelse er tilføjet begivenhed lyttere er stoppet, og vores spiller, er fjernet: offentlig funktion destroy() {updatewaypoints(); value - ghost = nye ghost(); forældre. addchild (spøgelse); removeeventlistener (event.enter_frame, enterframe) fase. removeeventlistener (keyboardevent.key_down, keydown) fase. removeeventlistener (keyboardevent.key_up, keyup); forældre. removechild (det)}, løntrin 5: spiller, er enterframe, begynde med at skabe funktion: offentlig funktion enterframe e: begivenhed) {}, i forbindelse med denne forelæsning vil vi tilføje en enkelt sammenstød med grænser, for at vise, hvordan waypoints ajourføres på denne ændring: hvis (. x - (. bredde /2) > 0) {} hvis (. x + (. bredde /2) < stage.stagewidth) {} hvis (. y - (. højde /2) > 0) {} hvis ((. + (. højde /2) < fase. stageheight) {}, er nu spiller kun bør bevæge sig i den retning, mens det er specificeret ikke røre ved en grænse.Inside the first if-statement add the following code for moving left:, if(keyPressLeft == true){ \tif((this.x-(this.width/2)) <= 0){ \t\tupdateWaypoints(); \t\tthis.x = this.width/2; \t}else{ \t\tthis.x -= speed; \t} },First we check if the left key is currently down, then we check to see if the Player's position is greater than or equal to 0; if so we update our waypoints and reposition the player to the edge of the left side; if not we continue to move the player left.,The exact same thing is done for the other three sides:, if(keyPressRight == true){ \tif((this.x+(this.width/2)) >= stage.stageWidth){ \t\tupdateWaypoints(); \t\tthis.x = (stage.stageWidth - (this.width/2)); \t}else{ \t\tthis.x += speed; \t} }, if(keyPressUp == true){hvis (. y - (. højde /2) < = 0) (updatewaypoints(); dette. y = this.height/2;} andre {. y - = hastighed), hvis (keypressdown = = sand) (hvis ((. + (højde /2.) > = fase. stageheight) (updatewaypoints(); dette. y = (stage.stageheight - (. højde /2)} andre {. y + = hastighed), og med, at vi er færdige med spilleren klasse!trin 6:,, starter et spøgelse, indsættes følgende linje i spøgelse er konstruktøren:, addeventlistener (event.added_to_stage, lokalitet), som før skabe, init(), funktion: offentlige funktion lokalitet (e: begivenhed) (selectedlife = times.length - 1; dette. x = waypoints [selectedlife] [0]. x. y = waypoints [selectedlife] [0]. y. starttime = flash. utils. gettimer(); addeventlistener (event.enter_frame, enterframe)}, starter vi med at vælge den vej, vi vil bruge (som standard vil vælge den sidste array); vi så holdning spøgelset til oprindelse, og vores spøgelse er start tid.så en begivenhed til at lytte til enterframe er skabt.,, trin 7: spøgelset er enterframe, vi skaber vores enterframe funktion: offentlig funktion enterframe e: begivenhed) {}, nu er vi nødt til at sløjfe gennem vores tid system.vi gør det gennem variable, jeg. vi kontrollere, om det er mindre end længden af det system, og at vi også kontrollere, om den tid, der er gået, er større end eller lig med den nuværende tidspunkt i system:, mens (< [selectedlife]. længde - 1 & &. flash. utils. gettimer() - starttime > = gange [selectedlife] [i]) (i + +), den næste ting at gøre er at flytte det spøgelse, hvis den tid, der er gået, er mindre end den nuværende tidspunkt fra system: hvis (flash. utils. gettimer() - starttime < gange [selectedlife] [i]) (updateposition();}, trin 8: ajourføring af spøgelse holdning, vi starter dette skridt væk ved at skabe det, updateposition(), funktion: offentlig funktion updateposition() {}, næste tilføje to variabler, til at repræsentere den forskel og afstand -forholdet mellem de gamle og nye holdning:, var forskel: punkt = waypoints [selectedlife] [i]. træk (det nye punkt (. x. y) var dist = diff.length; vi trække punkter fra hinanden for at finde afstanden.nu må vi flytte spøgelse: hvis (dist < = hastighed) {. x = waypoints [selectedlife] [i]. x. y = waypoints [selectedlife] [i]. y.} andre (diff.normalize (1); denne. x + = diff.x * hastighed. denne. y + = diff.y * hastighed), vi først undersøge, om den afstand, der er mindre end den hastighed (dvs. den afstand, spøgelse går hvert kryds); hvis vi flytter det spøgelse, direkte til sagen.hvis afstanden er mindre, så vi kan normalisere forskellen ("betyder, at dens omfang er lig med 1, samtidig med at bevare den retning og følelse af vektoren" - euclidean vektorer i flash), og vi øger spøgelse er holdning i retning af punkt.,,,, trin 9: side bemærk, at konstatere, om denne metode er, at det bruger en masse cpu ressourcer til konstant belastning og punkter, og til tider kan give nogle lag 'er, selv om den logik er rigtigt.vi fandt to måder at bekæmpe dette, skønt!den første er, at din stg være usammenpresset i offentliggøre miljøer; dette vil resultere i en længere belastning på start, men resultater vil være nemmere.den anden er bedre, hvis du har planer om at udarbejde deres projekt som en exe for offline anvendelse: blot øge billedhastigheden noget omkring 60.,, konklusion:, tak for at du har tid til at læse denne lektion!hvis du har spørgsmål eller kommentarer, læg dem ned.og hvis du vil have en ekstra udfordring prøver at oprette det spøgelse klasse til at følge de veje, i bakgear, eller i slowmotion.



Previous:
Next Page: