Shoot ut Stars med Stardust Particle Engine
Del
Del
Del
Del
Dette Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne opplæringen vil jeg introdusere deg Stardust Particle Engine. Først skal jeg vise deg hvordan du setter opp Stardust, og så skal jeg dekke de grunnleggende Stardust klasse ansvar og hvordan de samarbeider sammen for å gjøre Stardust arbeid som helhet.
Deretter vil vi se på en Stardust generelle arbeidsflyt og komme ned til å skape en partikkel effekt med stjerner skyter ut fra musepekeren; stjernene vil avta gradvis, vokse seg større etter fødselen, og krympe når døende.
Til slutt vil jeg vise fleksibiliteten i Stardust ved å opprette flere varianter fra den allerede komplett eksempel, blant annet ved hjelp animerte filmklipp som partikler variabel partikkel simulering tidsskala, og skyte ut visningsobjekter av ulike klasser fra en enkelt emitter.
Denne veiledningen er ment for folk som allerede er kjent med Actionscript 3.0 objektorientert programmering (OOP ), så jeg antar at du allerede vet veldig godt hva klasser, objekter, arv og grensesnitt mener. Ikke noe problem med OOP? Så la oss gå skyte noen stjerner!
Stardust Particle Engine
Som navnet antyder, er Stardust brukes for å lage partikkeleffekter. Hvis du er en erfaren ActionScripter, kanskje du har opprettet partikkeleffekter fra scratch mange ganger, og si "jeg er helt kult med å skape partikkel effekter fra bunnen av, så hvorfor skulle jeg trenger en partikkel motor likevel?" Vel, er Stardust her for å hjelpe deg å fokusere mer på selve partikkel atferd design enn å bekymre seg om kjedelige underliggende lavnivå ting, slik som minnehåndtering. I stedet for å skrive kode for å ta vare på partikkel data, initialisering og avhending ressurser, med Stardust, få deg til å hoppe over disse kjedelige rutiner og bare bestemme hvordan du vil at partikler skal oppføre seg.
Stardust Funksjoner
Klassen strukturen i Stardust ble inspirert av flint Particle System, et annet Actionscript 3.0 partikkel motor. Dermed deler de noen lignende grunnleggende funksjoner I tillegg til disse grunnleggende funksjonene, gir Stardust også flere avanserte funksjoner for erfarne brukere. Anmeldelser Når det gjelder partikkeleffekter, er det svært viktig å håndtere enorme partikkel data effektivt. Stardust gjør tung bruk av objekt bassenger og lenkede lister for å forbedre ytelsen: Før vi kommer ned til selve kodingen, må vi ta en kopi av Stardust Particle Engine. Det er utgitt under MIT-lisensen, som betyr at det er helt gratis uansett om du ønsker å bruke den i en kommersiell eller ikke-kommersielt prosjekt Her er Stardust prosjekt hjemmeside:. Http://code.google. com /p /stardust-partikkel-motor / Du kan laste ned Stardust her: http://code.google.com/p/stardust-particle-engine/downloads/list På I skrivende stund, den nyeste versjonen som kan lastes ned fra nedlastingsliste er 1.1.132 Beta. Du kan alltid ta tak i siste revisjon fra SVN repository (som kanskje ikke er stabil, men). På prosjektets hjemmeside, kan du også finne flere tilbehør som API dokumentasjon og kopi av PDF manual. Det er enda video tutorials på YouTube. Her kommer jeg til å kort dekke Stardust kjernen klasser og deres ansvarsområder. Generelt partikkel effekter er alle om å kontrollere en mengde enheter med lignende men randomisert utseende og atferd. Random klasse er for å generere tilfeldige tall, som kan brukes i Dust for randomisering partikkelegenskaper. For eksempel er UniformRandom klasse en underklasse av Random klassen, og navnet forteller alt: tilfeldig tall generert av en UniformRandom objekt er jevnt fordelt, og jeg skal bruke denne klassen spesielt for hele opplæringen Det er tider når en endimensjonal tilfeldig tall er ikke nok. Noen ganger trenger vi todimensjonale tilfeldige tall, som er essensielt par av tilfeldige tall, for eiendommer som posisjon og hastighet. The Zone klassen er for å generere todimensjonale tilfeldig tall parene. Denne klassen modeller et tilfeldig tall pair som et tilfeldig punkt i en 2D-sone. For eksempel, CircleZone genererer tilfeldige tall par (x, y) fra tilfeldige punkter i en sirkulær region. Random og Zone klasser er i hovedsak brukt av initializer klasse, som vil bli dekket senere. Den Zone3D klassen er 3D-motstykket til denne klassen, for 3D-partikkeleffekter. emitter klasse er i utgangspunktet der alle lavnivå ting er innkapslet. En emitter initialiserer nyopprettede partikler før de legges inn i simuleringen, oppdateringer partikkelegenskaper i hver hoved sløyfe iterasjon, og fjerner døde partikler fra simuleringen. Den Emitter.step () metoden er hva du ønsker å påberope seg gjentatte ganger for å holde Stardust oppe og går. The Clock klassen bestemmer frekvensen av ny partikkel etableringen for emittere. En Emitter objekt holder nøyaktig en referanse til en klokke objekt. Spør klokken objekt hvor mange nye partikler det bør skape i begynnelsen av hver Emitter.step () -metoden samtale emitter. Ta SteadyClock klassen for eksempel, forteller det emittere å lage nye partikler med en konstant rate. Denne klassen er for initialisering nyopprettede partikler. En initializer objektet må legges til en emitter for at det skal fungere. I utgangspunktet initialiserer én initializer underklasse bare én partikkel eiendom. For eksempel, initialiserer Mass initializer klasse massen av nye partikler. Noen initializers godta et tilfeldig objekt som en konstruktør paramter for initialisering partikler med randomiserte verdier. Følgende kode oppretter et liv initializer som initialiserer partikkel liv til verdier sentrert på 50 med variasjon fra 10, nemlig mellom området fra 40 til 60. Handling objekter oppdatere partikkelegenskaper i hver iterasjon av hovedsløyfe (Emiter.step () metoden). For eksempel Flytt tiltaksklasse oppdateringer partikkelposisjoner i henhold til hastighet. En handlingsplan objektet må legges til en emitter for at det skal fungere. Nå som du vet hvordan kjernen klasser samarbeide sammen, la oss ta en titt på en generell arbeidsflyt for Stardust . Du starter ved å opprette en emitter. Bruk Emitter2D klassen for 2D-partikkel effekter og Emitter3D klasse for 3D-effekter Å angi hastigheten til partikkelen skapelse, vi trenger en klokke. Dette kan enten være satt av Emitter.clock eiendom eller ved å sende en klokke som første parameter til emitter konstruktør Legg handlinger til emitter gjennom Emitter.addAction) () -metoden Lag en renderer og legge emitter til renderer gjennom Renderer.addEmitter () -metoden Til slutt, gjentatte ganger kaller Emitter.step () metode for å holde partikkel simuleringen går. Du ønsker kanskje å bruke enter-frame hendelse eller en timer for å gjøre dette. I en enkelt ring av Emitter.step () -metoden, bestemmer hvor mange klokke nye partikler skal opprettes, er disse nye partikler initialisert av initializers, alle partikler blir oppdatert av handlinger, blir døde partikler fjernes, og til slutt, gjengir gjengivelses partikkel effekt Alright. Det er ganske mye alt for Stardust primer. Nå er det på tide å åpne Flash IDE og få hendene skitne Opprett en ny Flash-dokument med en dimensjon på 640x400 en bildefrekvens på 60 bilder per sekund, og en mørk bakgrunn. Her har jeg laget en mørkeblå gradient bakgrunn. Forresten, fungerer Stardust godt med både Flash Player 9 og 10, så det er greit uansett du bruker Flash CS3 eller CS4. I denne opplæringen vil jeg skal bruke Flash CS3 Vi skaper en partikkel effekt med stjerner, så vi trenger å tegne en stjerne og konvertere det til et symbol, eksporteres for Action selvfølgelig. Dette symbolet vil bli brukt senere for å gjengi vår partikkel effekt. Navn symbolet og eksportert klassen "Star" Opprett et nytt dokument klasse, og gi den navnet StarParticles Som nevnt i den generelle arbeidsflyten, er første skritt å opprette en emitter. Og neste skritt er å legge initializers og handlinger til emitter. Selv om dette kan gjøres i dokumentet klassen konstruktør, jeg anbefaler sterkt at det gjøres i en egen Emitter underklasse. Det er alltid bedre å skille partikkel oppførsel utforming danner hovedprogrammet; ved å gjøre det, er koden mye renere og enklere å endre i fremtiden, uten å bli blandet opp med hovedprogrammet. Vi kommer til å lage et 2D-partikkel effekt, så Emitter2D er emitter klassen vi 're kommer til å forlenge. Forleng Emitter2D klassen og name it StarEmitter, siden vi kommer til å gjøre det skyte ut stjerner senere. Emitter konstruktør aksepterer en klokke parameter, så vi vil erklære en konstruktør parameter å passere på en klokke objekt referanse til de super konstruktør En bedre tilnærming for å skape en emitter underklasse er å erklære partikkel parametre som statiske konstanter, gruppert på ett sted. Så i tilfelle du ønsker å justere parametere, vil du alltid vet hvor du finner de erklæringer. Betydningen av disse konstantene vil bli forklart senere når de brukes Hvilke initializers trenger vi å lage vår partikkel effekt? La oss ta en titt på listen nedenfor: Ok, vi er ferdige med initializers. Nå er det på tide å legge handlinger til emitter. Nedenfor er en liste over tiltak vi trenger. Det var det. Vår emitter er gjort. Her er koden for denne emitter i sin helhet, nødvendige import uttalelser inkludert Nå er det på tide å gå tilbake til dokumentet klassen og avslutte det opp. La oss ta en titt på de gjenværende oppgaver Nedenfor er hele koden for dokumentet klassen, nødvendige import uttalelser inkludert Til slutt, vi er ferdig! Nå la oss ta en titt på utfallet. Trykk CTRL + ENTER i Flash for å teste filmen, og du vil se resultatet Vi er ikke ferdig ennå! La oss gjøre noen flere varianter. Den første er å bruke animerte filmklipp for våre partikler Denne første varianten er ganske enkelt, ikke medfører ekstra koding. Det er så enkelt som å skape en grunnleggende tidslinje animasjon. Redigere Star symbol i Flash IDE, opprette en annen nøkkelbilde, og endre stjernens farge i denne rammen til rødt. Dette fører i hovedsak stjernene til å blinke mellom gult og rødt. Du ønsker kanskje å sette inn noen flere tomme rammer i mellom, siden en bildefrekvens på 60 bilder per sekund er for fort for en to-frame blinke. Nå teste filmen og sjekke resultatet. Den blinkende stjernen effekten ser tegneserieaktig; dette kan brukes for klassiske svimmel-stjerners effekter, som er ofte sett i tegneserier Som jeg nevnte tidligere, en av Stardust funksjonen er "justerbar simulering tidsskala", som betyr tidsskalaen brukes av Stardust for partikkel simulering kan justeres dynamisk. Alt er gjort ved å endre Emitter.stepTimeInterval eiendommen, som er en standard. Følgende kodebit endrer denne verdien til 2, noe som resulterer i partikler som beveger seg dobbelt så fort og emitter skape nye partikler på dobbel hastighet I denne varianten, vil vi lage en glidebryter på scene og bruke den til å dynamisk justere simuleringen skalaen Dra en Slider komponent ut fra Components Panel på scenen. Name it "slider" Vi vil gjerne ha glidebryteren til å gli mellom 0,5 og 2, noe som betyr at vi ønsker at våre partikkel simulering for å være minst halvparten så fort som normal og høyst to ganger ved rask. Sett også "liveDragging" for å true, slik at vi kan se oppdateringen som vi skrubbe slideren tommelen Nå må vi lytte til glidebryteren endring hendelse til dynamisk endre simuleringen tidsskala. Først importere SliderEvent klassen i dokumentet klassen Og da lytte til glidebryteren endring hendelse i dokumentet klassen konstruktør Til slutt endre simulering tidsskalaen i lytteren. Legg til følgende lytteren til dokumentet klassen La oss se på resultatet. Legg merke til at når du skrubbe glidebryteren tommel til venstre, bremser partikkel simulering ned, og hvis du skrubbe rett simuleringen går raskere Stardust gir en spesiell initializer kalt SwitchInitializer. Sin konstruktør godtar to matriser som parametere; den første er en rekke initializers, og den andre, med samme lengde som den første, er en matrise av "vekter". Hver gang Stardust bruker denne initializer å initial partikler, en av initializers i første rekke er tilfeldig valgt å initial partiklene. Jo mer vekt en initializer har, jo mer sannsynlig vil det bli plukket for initialisering. I denne varianten, skal vi gjøre det emitter skyte ut ikke bare stjerner, men også hvite sirklene Tegn en hvit sirkel, konvertere det til et symbol eksporteres for Actionscript, og navngi symbol og klassen "Circle". Dette er den klassen vi skal bruke for de hvite sirklene Åpne StarEmitter klasse, og slette følgende linje. Dette deaktiverer DisplayObjectClass initializer vi satt opp i de forrige trinnene Nå kan du legge til følgende kode i konstruktøren. Vi vil gjerne ha stjerner og sirkler som låter like sannsynlig, så vi skal gi dem begge en vekt på 1. Til slutt tester filmen.
2D og 3D partikkel effekter Z -. Stardust kan brukes til å lage både 2D og 3D partikkel effekter. Det har sin egen innebygde 3D-motor, og det kan også brukes til å arbeide sammen med andre tredje partikkel 3D-motorer, inkludert ZedBox, Papervision3D, og ND3D.
Justerbar Simulering Skalaen Anmeldelser - Den tidsskala som brukes for partikkel simulering kan dynamisk justeres under kjøring. For eksempel, hvis du endrer tidsskala til halvparten av den opprinnelige, vil partikkelen effekten være halvparten så fort som normal hastighet; og hvis du justere tidsskalaen til to ganger den opprinnelige, er partikkeleffekten kommer til å bli simulert dobbelt så fort som normalt. Denne funksjonen kan komme godt med når du lager et spill som har slow-motion effekter. Partikkelen effekten kan bremse ned for å matche spillet ditt motorens turtall, synkronisering med spill animasjon og grafikk
XML serialisering Anmeldelser - Du kan forvandle din partikkel system inn i en fil i XML-format som kan lagres på harddisken, senere lastet under kjøretid og tolket til å rekonstruere din orignal partikkel system. Dette er svært nyttig når du arbeider med et stort prosjekt. Si at du bare ønsker å størrelse opp partikler litt, slik at du finjustere parametrene i kildekoden og rekompilere hele Flash-applikasjonen, som kan ta et minutt, eller til og med over fem minutter hvis prosjektet er svært stor. Det er verdt det? Absolutt ingen. Det er totalt bortkastet tid. Bruke XML serialisering funksjonen til å lagre partikkel system i eksterne XML-filer, er du skille parametrene fra kildekoden for den viktigste applikasjonen. Så det du må gjøre er å åpne XML-fil, endre parameterverdier, lagre det, og åpne hovedprogrammet. Det er alt! Ingen recompilation er nødvendig i det hele tatt. Jeg vil si dette er den ideelle måten å jobbe med store prosjekter.
Objekt Pools Z - Brukte objektene lagres i en pool; senere, hvis en gjenstand av samme type som kreves, Dust betyr ikke opprette det umiddelbart, men kontrollerer om det er en gjenstand som tidligere er lagret i objektet bassenget venstre. Hvis ja, tar Stardust rett og slett ut som objekt og bruker det, i stedet for å skape et helt nytt objekt. Vanligvis partikkeleffekter innebære en rekke objektforekomst, som er CPU krevende. Ved å bruke objekt bassenger, Stardust reduserer instantiation overhead
Koblede Lister Z - Det er veldig lett og fristende å lagre partikkel data inn i en matrise.; imidlertid, i et tilfelle når partikler dannes og fjernes meget ofte, tar lang rekke spleising sted for å fjerne døde partikler. Array spleising er en CPU-krevende prosess, spesielt for lange rekker. For en lenket liste, uansett hvor lang listen er, tar det alltid det samme kort tid å spleise ut døde partikler. Fra versjon 1.1, begynte Stardust å bruke lenkede lister internt til butikken partikkel data.
Sette opp Stardust
Stardust Class Ansvarsområder
StardustElement
< p> Denne klassen er super av alle kjernen klasser, som definerer egenskaper og metoder spesielt for XML serialisering.
Random
. Zone
Emitter
Klokke
initializer
nytt liv (ny UniformRandom (50, 10)); Handling
Generelt Stardust Arbeidsflyt
Var emitter. Emitter = new Emitter2D ();
//eiendom approachemitter.clock = new SteadyClock (1); //Konstruktør approachvar emitter. Emitter = new Emitter2D (ny SteadyClock (1));
emitter.addInitializer (nytt liv (ny UniformRandom (50, 10))) Tilsett initializers til emitter gjennom Emitter.addInitializer () -metoden,. emitter.addInitializer ( ny Scale (ny UniformRandom (1, 0,2)));
emitter.addAction (ny Move (.), emitter.addAction (nytt Spin ( ));
Var renderer. Renderer = new DisplayObjectRenderer (container); //"container" er vår container spriterenderer.addEmitter (emitter);
//skriv-frame hendelse approachaddEventListener (Event.ENTER_FRAME, mainLoop); //timer approachtimer.addEventListener (TimerEvent.TIMER, mainLoop), funksjon mainLoop (e: Hendelses):. void {emitter.step ( );}
Trinn 1:. Opprette en ny Flash dokument
Trinn 2:. Tegn en stjerne
Trinn 3:.. Opprett dokument Class
pakke {import flash.display .Sprite; public class StarParticles strekker Sprite {offentlig funksjon StarParticles () {}}}
Trinn 4: Utvide Emitter
pakke {import idv.cjcat.stardust.twoD.emitters.Emitter2D.; public class StarEmitter strekker Emitter2D {offentlig funksjon StarEmitter (klokke: Klokke) {//passere på klokken objektet til superklassen sin konstruktør super (klokke); }}}
Trinn 5: Erklærer Constants
//gjennomsnittlig lifespanprivate statisk konst LIFE_AVG: Number = 30; //levetid variationprivate statisk konst LIFE_VAR. Number = 10; //gjennomsnittlig scaleprivate statisk konst SCALE_AVG: Antall = 1; //skala variationprivate statisk konst SCALE_VAR: Number = 0,4; //skala voksende timeprivate statisk konst GROWING_TIME: Number = 5; //skala krymper timeprivate statisk konst SHRINKING_TIME: Number = 10; //gjennomsnittlig speedprivate statisk konst SPEED_AVG: Antall = 10; //hastighet variationprivate statisk konst SPEED_VAR: Number = 8; //gjennomsnittlig omega (vinkelhastighet) private statisk konst OMEGA_AVG: Antall = 0; //omega variationprivate statisk konst OMEGA_VAR: Number = 5; //demping coefficientprivate statisk konst Demping: Number = 0,1;
Trinn 6: Legge Initializers
DisplayObjectClass Anmeldelser - Dette initializer tildeler en bestemt skjerm objekt til hver partikkel, som vil bli brukt av en DisplayObjectRenderer å gjengi partikkel effekter. Konstruktøren aksepterer en klasse referanse til displayet objektet klassen vi ønsker på å bruke; for denne opplæringen, vil denne klassen være Stjerneklasse (symbol) vi opprettet i trinn 2.
Livet Anmeldelser - Dette initializer tildeler hver partikkel et tilfeldig liv verdi. Senere vil vi legge handlingene til emitter å utarme dette livet verdi over tid, og for å markere en partikkel som død om sitt liv verdi når null. En Random objektet blir fort til konstruktøren, som vil bli brukt av denne initializer å generere tilfeldige verdien for partiklene 'liv. For de fleste tilfeller er UniformRandom klasse praktisk og tilstrekkelig; den første parameter i UniformRandom konstruktøren er sentrum (eller gjennomsnittlig) verdien av tilfeldige tall generert, og den andre er radius (eller variant). For eksempel, en UniformRandom objekt med sentrum 20 og variasjon 5 genererer tilfeldige tall innen [15, 25] rekkevidde. Her bruker vi LIFE_AVG konstant for senteret verdi og LIFE_VAR for radius
Skalaanmeldelser -. I likhet med Liv initializer, initialiserer Scale initializer en partikkel skala til en tilfeldig verdi, bestemmes av en Tilfeldig objekt sendes til initializer konstruktør. Her bruker vi SCALE_AVG konstant for senteret verdi og SCALE_VAR for radius
Posisjonsanmeldelser -. Dette initializer tildeler en partikkel tilfeldig posisjon. I motsetning til Liv og Scale initializers, som trenger bare 1D tilfeldige tall, krever posisjons initializer 2D tilfeldig tall par generatorer. Som beskrevet i Stardust Class ansvar delen, er sonen klassen akkurat for dette formålet. The Zone objekt sendes til initializer konstruktør brukes til å generere 2D tilfeldig tall par, som vil bli tildelt til partikler som posisjonsvektorer. I denne opplæringen skal vi lage stjerner skyter ut fra et enkelt punkt ligger på musepekeren, så vi kommer til å bruke en Single klasse, som er en sone underklasse. For å dynamisk justere koordinere denne Single objekt fra dokumentet klassen, må vi utsette en referanse til dette punktet objekt gjennom en offentlig eiendom. Dette er hva "point" eiendom er for
Velocity Anmeldelser -. Samme som posisjons initializer, må Velocity initializer en sone objekt for å generere 2D tilfeldig verdi-par til å initialpartikkelhastigheter. En 2D vektor som genereres av sonen objektet, som er koordinaten til et vilkårlig punkt i sonen, er tilordnet til partikler som deres hastigheter. Her bruker vi LazySectorZone klasse som representerer en sektor regionen. En sektor er en del av en sirkel omsluttet av to radier og to vinkler. For LazySectorZone, de to vinklene er 0 og 360 som standard, noe som representerer en full vinkel rundt en sirkel. Den første parameteren konstruktøren av LazySectorZone klassen er gjennomsnittet av de to radier, og den andre er variasjonen av radier. I dette tilfelle gjennomsnittet av de to radier representerer den gjennomsnittlige hastighet, og variasjonen av radiene representerer variasjon av hastigheten. Her bruker vi SPEED_AVG konstant for første parameter og SPEED_VAR for andre
Rotasjon Anmeldelser -. Rotasjons initializer initialiserer en partikkel rotasjon vinkel til en tilfeldig verdi. Og som noen av de tidligere nevnte initializers, godtar konstruktøren en tilfeldig gjenstand for å generere en tilfeldig verdi. Siden vi ønsker å ha partikler med vinkler fra 0 til 360 grader, vil vi bruke 0 som sentrum og 180 som radius av UniformRandom objektet
Omega Anmeldelser -. Omega , som i de fleste fysikk lærebøker, betyr vinkelhastighet. Med det sagt, er hensikten med denne initializer klart: det initialiserer en partikkel vinkelhastighet til en tilfeldig verdi, og OMEGA_AVG konstant brukes som sentrum og OMEGA_VAR som radius av UniformRandom objektet
poeng = new Single (); addInitializer (nye DisplayObjectClass (Star)); addInitializer (nytt liv (ny UniformRandom (LIFE_AVG, LIFE_VAR))); addInitializer (ny Scale (ny UniformRandom (SCALE_AVG, SCALE_VAR))); addInitializer (ny posisjon (punkt)); addInitializer (ny Velocity (ny LazySectorZone (SPEED_AVG, SPEED_VAR))); addInitializer (ny Rotasjon (ny UniformRandom (0, 180))); addInitializer (nytt Omega (ny UniformRandom (OMEGA_AVG, OMEGA_VAR)));
Trinn 7: Legge Handlinger
DeathLife Anmeldelser - Når en partikkel liv verdi når null, denne handlingen markerer partikkel som død, endre sin isDead eiendom fra false til true. På slutten av en emitter trinn, er døde partikler fjernes
Flytt Anmeldelser -.. Ganske mye som navnet antyder, Flytt handlings oppdateringer partikkelposisjoner i henhold til sine hastigheter
Spin Anmeldelser - Ligner på Move handling, oppdaterer Spin handlingen en partikkel rotasjon vinkel i henhold til partikkelens omega verdi (vinkelhastighet)
Demping Anmeldelser -. Denne handlingen multipliserer en partikkel veloctiy med en faktor innenfor området [0, 1], simulere demping effekter og gradvis sakker partikkel. En faktor på ett betyr ingen dempning i det hele tatt: partikler å bevege seg fritt, som om det ikke fantes noen dempende effekt; en faktor på null betyr total demping: alle partikler kan ikke flytte litt. Denne faktoren er bestemt av "dempningskoeffisienten" gjennom denne formelen: "-faktor = 1 - (dempningskoeffisient)". Parameteren gått til konstruktøren er demping koeffisient; her er vi bare vil ha litt demping effekt, så vi bruke verdien 0,1 for koeffisienten
ScaleCurve Anmeldelser -. Den ScaleCurve handlingen endrer en partikkel skala i henhold til sine liv verdi. Den vokser fra en innledende skala til en normal skala etter fødselen, og blekner til en endelig skala som den dør. Selvfølgelig kan en partikkel også ha en innledende eller avsluttende skalaverdi som er større enn den normale skala; det bare avhenger av personlige valg. I mange tilfeller vil vi gjerne partikler å ha en innledende og avsluttende skala verdi på null, som er standardverdien. Den første parameteren i konstruktøren står for en partikkel voksende tid, og den andre er det svinn tid; så vi passerer i GROWING_TIME og SHRINKING_TIME konstanter som den første og andre parameter, respektivt. Den voksende tid er fem, som betyr en partikkel vokser fra null skala til normal skala i løpet av sin første fem enhet levetid; og krympetiden er 15, noe som betyr at en partikkel krymper til null skala i siste 15 enhet levetid. Legg merke til at overgangen er lineær som standard, men en hvilken som helst lettelser fucntion kan anvendes, spesielt de lettelser ligninger som er opprettet av Robert Penner. Det er en annen lignende aksjon som heter AlphaCurve
, som fungerer på alpha verdier på samme måte.
pakke {import idv.cjcat.stardust.common.actions.Age.; import idv.cjcat.stardust.common.actions.DeathLife; import idv.cjcat.stardust.common.actions.ScaleCurve; import idv.cjcat.stardust.common.clocks.Clock; import idv.cjcat.stardust.common.initializers.Life; import idv.cjcat.stardust.common.initializers.Scale; import idv.cjcat.stardust.common.math.UniformRandom; import idv.cjcat.stardust.twoD.actions.Damping; import idv.cjcat.stardust.twoD.actions.Move; import idv.cjcat.stardust.twoD.actions.Spin; import idv.cjcat.stardust.twoD.emitters.Emitter2D; import idv.cjcat.stardust.twoD.initializers.DisplayObjectClass; import idv.cjcat.stardust.twoD.initializers.Omega; import idv.cjcat.stardust.twoD.initializers.Position; import idv.cjcat.stardust.twoD.initializers.Rotation; import idv.cjcat.stardust.twoD.initializers.Velocity; import idv.cjcat.stardust.twoD.zones.LazySectorZone; import idv.cjcat.stardust.twoD.zones.SinglePoint; public class StarEmitter strekker Emitter2D {/** * konstanter * /private static konst LIFE_AVG: Number = 30; private static konst LIFE_VAR: Number = 10; private static konst SCALE_AVG: Number = 1; private static konst SCALE_VAR: Number = 0,4; private static konst GROWING_TIME: Number = 5; private static konst SHRINKING_TIME: Number = 10; private static konst SPEED_AVG: Number = 10; private static konst SPEED_VAR: Number = 8; private static konst OMEGA_AVG: Antall = 0; private static konst OMEGA_VAR: Number = 5; private static konst demping: Number = 0,1; offentlig Var Punkt: Single; offentlig funksjon StarEmitter (klokke: Klokke) {super (klokke); punkt = new Single (); //initializers addInitializer (nye DisplayObjectClass (Star)); addInitializer (nytt liv (ny UniformRandom (LIFE_AVG, LIFE_VAR))); addInitializer (ny Scale (ny UniformRandom (SCALE_AVG, SCALE_VAR))); addInitializer (ny posisjon (punkt)); addInitializer (ny Velocity (ny LazySectorZone (SPEED_AVG, SPEED_VAR))); addInitializer (ny Rotasjon (ny UniformRandom (0, 180))); addInitializer (nytt Omega (ny UniformRandom (OMEGA_AVG, OMEGA_VAR))); //handlinger addAction (New Age ()); addAction (ny DeathLife ()); addAction (ny Move ()); addAction (ny Spin ()); addAction (ny Damping (demping)); addAction (ny ScaleCurve (GROWING_TIME, SHRINKING_TIME)); }}}
Trinn 8: Fullfør Document Class
Opprett en StarEmitter eksempel Z -.. Vi kommer til å instantiate StarEmitter klassen vi nettopp ferdig
Gi en klokke objekt til emitter Anmeldelser - Vi ønsker en jevn hastighet på utslipp av partikler, så vi bruker den SteadyClock klassen. Parameteren som føres til klokken konstruktør er frekvensen av utslipp, eller, med andre ord, antall nye partikler som er opprettet i hver emitter trinn; en brøk rente på 0,5 betyr i hvert emitter trinn, er det en 50% sjanse for en ny partikkel som skal opprettes og 50% sjanse for ingen partikkel opprettet
Lag en Renderer Anmeldelser -. Å visual partikkel effekt, vil vi kommer til å trenge en renderer. Den DisplayObjectRenderer skal brukes i forbindelse med DisplayObjectClass initializer: den initializer tildeler en skjerm objekt til hver partikkel, og renderer legger disse visningsobjekter til en container visningslisten, stadig oppdatere dem. Også, ikke glem å legge emitter til renderer
Ring Main Loop repeatly Anmeldelser -. Dette siste trinnet holder Stardust oppe og går. . Her vil vi gjøre bruk av enter-frame event
pakke {import flash.display.Sprite.; import flash.display.StageScaleMode; import flash.events.Event; import flash.geom.Rectangle; import idv.cjcat.stardust.common.clocks.SteadyClock; import idv.cjcat.stardust.common.renderers.Renderer; import idv.cjcat.stardust.twoD.renderers.DisplayObjectRenderer; public class StarParticles strekker Sprite {private Var emitter: StarEmitter; offentlig funksjon StarParticles () {//instantiate StarEmitter emitter = new StarEmitter (ny SteadyClock (0,5)); //beholderen sprite Var container: Sprite = new Sprite (); //den renderer som gjengir partikkel effekt Var renderer: Renderer = new DisplayObjectRenderer (container); renderer.addEmitter (emitter); //legge beholderen til fremvisningslisten, over bakgrunns addChildAt (container, 1); //gjøre bruk av enter-frame hendelse addEventListener (Event.ENTER_FRAME, mainLoop); } Private funksjon mainLoop (e: Hendelses): void {//oppdatere Single posisjonen til musen posisjon emitter.point.x = mouseX; emitter.point.y = mousey; //ringe hovedsløyfen emitter.step (); }}}
Variant 1:. Animerte Stars
Trinn 9:. Lag en tidslinje Animation
Variasjon. 2: Justering Skalaen Dynamisk
emitter.stepTimeInterval = 2;.
Trinn 10:. Lag en Slider
Trinn 11:. Setup Slider Parametere
Trinn 12:. Slider hendelse lytteren
import fl.events.SliderEvent;.
slider.addEventListener (SliderEvent.CHANGE, changeTimescale).;
privat funksjon changeTimescale (e: SliderEvent):. Void {emitter.stepTimeInterval = slider.value; }
Variasjon. 3: Multiple Display Class
Trinn 13:. Tegn en sirkel
Trinn 14:. Opprett Switch initializer
addInitializer (nye DisplayObjectClass (Star));.
//den initializer for starsvar doc1: DisplayObjectClass = nye DisplayObjectClass (Star); //den initializer for hvit circlesvar doc2: DisplayObjectClass = nye DisplayObjectClass (sirkel); //bryteren initializervar si: SwitchInitializer = new SwitchInitializer ([doc1, doc2], [1, 1]); //legge bryteren initializer til emitteraddInitializer (SI);