An Introduksjon til FlashPunk: The Basics
5
Del
13
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Lær det grunnleggende om hvordan FlashPunk fungerer -. En fantastisk bibliotek for å spare deg for tid og hjelpe deg å skape det perfekte spillet
Endelig resultat Forhåndsvisning
!
La oss ta en titt på det endelige resultatet vi skal jobbe mot:
Bruk piltastene for å bevege figuren din (den blå fyr). Den rød /brun fyr er en NPC; det skraverte røde området er et faresonen, og den grønne boksen er en knapp. Du vil lære å lage alt dette i denne opplæringen
Trinn 1:.? Hva er FlashPunk
FlashPunk er en Actionscript 3-biblioteket skapt for utviklingen av Flash-spill. I utgangspunktet, det gjør alt det harde arbeidet for deg og lar deg fokusere helt og holdent på å utvikle spillet ditt, heller enn på motoren bak det. Det beste med det er at du ikke trenger Flash Pro til å jobbe med det: du kan gjøre alt med en gratis kode editor som FlashDevelop. For ikke å nevne det er mye raskere når det gjelder å tegne ting på skjermen, siden den bruker blitting!
Denne opplæringen vil gå gjennom alle de grunnleggende FlashPunk. Etter å ha fulgt den, vil du være klar til å gjøre et enkelt spill med denne fantastiske bibliotek
Trinn 2: Initial motor
Begynn med å laste ned den nyeste versjonen av FlashPunk fra offisielle nettstedet (denne opplæringen bruker versjonen fra 30. august, 2011). Sett "net" -mappen, med alt innhold, i din "src" -mappen.
FlashPunk har en klasse kalt Engine. Denne klassen er det som starter alt i biblioteket. Tenk på det som en hovedklasse, men med spesiell kode for å starte opp alle klassene i FlashPunk. For å kunne bruke Engine klassen, vil vi endre hovedklassen litt
pakke {import net.flashpunk.Engine.; [Frame (factoryClass = "Preloader")] public class Hoved strekker Engine {offentlig funksjon main (): void {}}}
Nå utvider vår klasse Engine. I Main konstruktør, må vi ringe til motoren konstruktøren: Dette er hva som skiller den viktig informasjon om spillet. Bredde, høyde, framerate og om motoren skal kjøre på en fast framerate eller ikke
offentlig funksjon Hoved (): void {super (550, 400, 30, false);}
Det er en funksjon som kan (og må) styres fra Engine Klasse: init () -funksjonen. Det vil kun en gang, og vil initialisere alt for å få spillet jobber
styre offentlig funksjon init (): void;
Jeg er ganske sikker på at alle ønsker. {Trace ("Spillet er i gang!")} å sette noe på skjermen og se denne motoren arbeider! På grunn av det, vil de neste trinnene dekke grunnleggende for elementene i FlashPunk, legger dybde som opplæringen foregår
Trinn 3:. Worlds og Entities
I FlashPunk Det er elementer som kalles Worlds og Enhetsregisteret. Dette er de viktigste elementene i biblioteket, og du vil arbeide med dem fra begynnelsen til slutten av spillet.
Worlds er ganske mye som det som er kjent som en "skjerm". Alt i spillet vil skje i en verden: hovedmenyen er en verden som vil gi deg tilgang til selve spillverdenen, hvor du vil kjempe noen fiender og dø, som vil lede deg til spillet over verden, med poengsummer og statistikk om hvor godt du gjorde. Mer om verdener vil bli forklart senere
Entities er nøyaktig hva de synes å være.; de lever i en verden og gjøre noe i det: en knapp er en enhet; din karakter er en enhet; fiender og kuler er enheter. De er de tingene som gir liv til spillet
Gitt at vi vil skape spillverdenen (det er på tide å gjøre hovedmenyen verden senere, la oss hoppe til litt action!) Ved å utvide FlashPunk World class.:
pakke {import net.flashpunk.World; public class spillverden strekker Verden {offentlig funksjon spillverden () {}}}
Nå som du har skapt en verden, må du fortelle FlashPunk at du ønsker denne verden å være den aktive. La oss gjøre det i Main.as:
private Var _gameWorld: verden; offentlig funksjon main (): void {super (550, 400, 30, false); _gameWorld = ny spillverden ();} overstyre offentlig funksjon init (): void {trace ("Spillet er i gang!"); FP.world = _gameWorld;}
Og ikke glem å importere net.flashpunk.FP
Trinn 4: Legge til en enhet, og gi det et bilde
Nå som vi har vår verden, kan vi lage en enhet ved å utvide Entity klassen og legge den til vår spillverdenen:
pakke {import net.flashpunk.Entity; public class GameEntity strekker Entity {offentlig funksjon GameEntity () {}}}
Og i GameWorld.as:
private Var _gameEntity: GameEntity; offentlig funksjon spillverden () {_gameEntity = new GameEntity (); legge (_gameEntity);}
Legg merke til at hvis du kompilere og kjøre spillet, gjør enheten ikke vises i skjermen. Det er fordi det har ikke noe bilde ennå! Hver enhet kan ha et grafisk objekt. Denne grafikken kan være et enkelt bilde, en spritesheet med animasjoner, flislagte bilder - stort sett alt
Vi vil legge dette lille bildet til vår enhet.
Et foretaks grafisk kan nås av grafikken eiendommen. Det er hvordan vi skal sette bildet i det! Først legge det; da, bare gi det til Image konstruktør og FlashPunk vil ta seg av trans at til noe synlig for deg. Kompilere og kjøre nå. Overraskelse! Vår enhet er det
pakke {import net.flashpunk.Entity!; import net.flashpunk.graphics.Image; public class GameEntity strekker Entity {[Bygg (kilde = "/../img/EntityImage.png")] privat konst BILDE: Klasse; offentlig funksjon GameEntity () {grafisk = new Image (BILDE); }}}
Dette er hva du bør få:
Trinn 5: Å gjøre Entity Move
Nå som vi har vår enhet på skjermen, hva med å gjøre det flytte ? Hver Entity har en funksjon kalt oppdatering (), som du må overstyre å bruke. Denne funksjonen kalles av hver verden i begynnelsen av hver ramme. Hvis du trenger å gjøre din enhet trekk, som er stedet hvor du plasserer koden
styre offentlig funksjon oppdateringen (): void {x + = 10 * FP.elapsed; y + = 5 * FP.elapsed;}
Og ikke glem å importere:
import net.flashpunk.FP;
Se den i aksjon! (Oppdater siden hvis du ikke kan se noe her.)
Du har kanskje lagt merke til bruken av FP.elapsed. FP.elapsed gir mye tid som har gått siden den siste rammen (i sekunder), noe som gjør det svært enkelt å lage tidsbasert bevegelse. Men for at det skal fungere, må du ha satt den fjerde parameter til Engine konstruktør til false. Husk at (Trinn 2)? Sette den til falske betyr at du ønsker FlashPunk å kjøre med en variabel timestep, mens sette den til true gjør FlashPunk kjøre på en fast timestep. Gjør sistnevnte, trenger du ikke å bruke FP.elapsed. Du vet at hver gang oppdateringen () funksjonen kalles, har en ramme gått
Trinn 6:. Flytt Entity som du ønsker Med Keyboard Input
Vi har fått foretaket flytte på bare én retning i det siste trinnet. Vi presenterer keyboard input: nå vil du være i stand til å flytte virksomheten til der du vil
FlashPunk har en klasse som heter Input som tar vare på tastatur og mus input begge. I denne opplæringen, vil vi bare bruke tastaturet input for bevegelse. Det er veldig enkelt:
styre offentlig funksjon oppdateringen (): void {if (Input.check (Key.A) || Input.check (Key.LEFT)) {x - = 50 * FP.elapsed; } Else if (Input.check (Key.D) || Input.check (Key.RIGHT)) {x + = 50 * FP.elapsed; } If (Input.check (Key.W) || Input.check (Key.UP)) {y - = 50 * FP.elapsed; } Else if (Input.check (Key.S) || Input.check (Key.DOWN)) {y + = 50 * FP.elapsed; }}
Og import uttalelser:
import net.flashpunk.utils.Input, importere net.flashpunk.utils.Key;
Input.check () returnerer true hvis Key vedtatt som et argument er å være trykket på det tidspunkt at funksjonen har blitt kalt. Det er andre svært nyttige funksjoner, som Input.pressed (), som returnerer true dersom nøkkelen har blitt trykket på den tiden at funksjonen har blitt kalt (dvs nøkkelen var opp en ramme siden og er nå ned), eller Input.released (), som gjør akkurat det motsatte.
En annen interessant ting at Input klassen tillater oss å gjøre er å definere mange nøkler under ett navn. For eksempel kan vi definere Key.UP, Key.W og Key.I som "UP", og bare se etter Input.check ("UP"). På den måten kan vi forbedre vår funksjon:
offentlig funksjon GameEntity () {grafisk = new Image (BILDE); Input.define ("UP", Key.W, Key.UP); Input.define ("DOWN", Key.S, Key.DOWN); Input.define ("venstre", Key.A, Key.LEFT); Input.define ("riktig", Key.D, Key.RIGHT);} overstyre offentlig funksjon oppdateringen (): void {if (Input.check ("venstre")) {x - = 50 * FP.elapsed; } Else if (Input.check ("HØYRE")) {x + = 50 * FP.elapsed; } If (Input.check ("UP")) {y - = 50 * FP.elapsed; } Else if (Input.check ("DOWN")) {y + = 50 * FP.elapsed; }}
Og dette er hva du bør få:
Trinn 7: Mer om Entities
Enheter kan gjøre mye mer enn bare å flytte rundt og har bilder. La oss ta en titt på hva overrasker de kan holde!
Entities har en egenskap kalt type. Du kan angi denne egenskapen til enhver streng du vil. Dette lar deg organisere dine enheter i grupper, som vil være svært nyttig i neste trinn (ca verdener). Vi kan for eksempel sette vår foretakets typen til «GameEntity":
offentlig funksjon GameEntity () {grafisk = new Image (BILDE); Input.define ("UP", Key.W, Key.UP); Input.define ("DOWN", Key.S, Key.DOWN); Input.define ("venstre", Key.A, Key.LEFT); Input.define ("riktig", Key.D, Key.RIGHT); type = "GameEntity";}
Etter på det, har vi den nyttige verden eiendommen og lagt () og fjernet () funksjoner. Verdens Eiendommen gir deg tilgang til hele verden fra innenfor foretakets kode når enheten er lagt til en verden. Det er som scenen eiendom i felles Flash utvikling; funksjonene er som ADDED_TO_STAGE og REMOVED_FROM_STAGE hendelsen lyttere. Her er et eksempel av funksjonene som arbeider i GameEntity.as:
styre offentlig funksjon lagt (): void {trace ("! Man har lagt til verden"); trace ("Entities i verden:" + world.count);} overstyre offentlig funksjon fjernet (): void {trace ("! Man har fjernet fra verden");}
Trinn 8: dypere titt på Worlds
Det er på tide å ta en dypere titt på verdener og hvordan de fungerer. Først av alt, kan FlashPunk kun ha en verden som kjører på en gang, men spillet kan ha så mange verdener som du ønsker, så lenge bare ett forblir aktiv hver gang.
Worlds har oppdateringen () fungerer akkurat som enheter gjør, men deres funksjon er litt annerledes: det er selve koden i verdensklasse. Det betyr at du må ringe super.update () hver gang du overstyre denne funksjonen.
Bortsett fra enheter, verdener kan også ha grafikk Det viktigste om verdener er at de har flere funksjoner for å hente enkelte enheter:. GetType (), getClass (), getAll (), getLayer () og getInstance (). På den måten kan du ha hele verden returnere en matrise av alle kulene som er i spillet, slik at du kan utføre en sjekk mot alle dem for kollisjon. Veldig nyttig, må jeg si! Ta en titt på koden lagt til World.as. Vi vil bruke en annen image også: Og ikke glem å importere net.flashpunk.graphics.Image I denne koden, legger addGraphic () funksjon samtale en annen grafisk ligner _gameEntity grafiske - tenk på det som en NPC ! - Til verden i posisjon (50, 50). Lines 23-31 viser et eksempel på å hente bare enheter av en bestemt type: vi kaller getType () for å få bare enhetene i "GameEntity" type (foreløpig kun én enhet). Etter det iterere vi gjennom hver enhet hentes og hindre dem fra å komme forbi høyre og nedre grenser. (. Så kan foretaket bevege seg utenfor skjermen, men ikke langt) Enkelt er det ikke På tide med noe mer interessant! FlashPunk støtter animasjoner av alle slag. Alt du trenger å gjøre er, i stedet for å opprette en forekomst av Image, opprette en forekomst av Spritemap. Denne klassen får en spritesheet og lar deg kartlegge rammer og lenker til animasjoner I vår foretakets klasse, legge dette spritemap. Deretter oppretter en forekomst av Spritemap og bestå spritesheet som en parameter til konstruktøren. Etter det, handler det om å ringe add () og spille () funksjoner konstruktøren av Spritemap (linje 19) tar fire argumenter: en kilde for å få et bilde fra, bredden og høyden på hver ramme av spritesheet og en tilbakeringingsfunksjonen til å ringe når de animasjons ender (valgfritt). I GameEntity konstruktør, skaper vi Spritemap og definere to animasjoner: "Stoppet", som bare inneholder det første bildet og går på 0 fps og "Blinker", som inneholder alle rammer og kjører med 24 bilder per sekund <(stoppet!). br> Resten av koden er der for å spille "Blinker" animasjon hvert tredje sekund Ta en titt på vår enhet blinker. Med alt går bra, er det på tide å innføre en annen funksjon: dueller. FlashPunk har en stor duellsystem: alt vi trenger å gjøre er å sette hitboxes for våre virksomheter og be verden for å sjekke for kollisjoner. For det, vil vi opprette en annen enhet som heter Box som vil inneholde følgende grafikk: Og inne GameWorld.as: setHitbox () -funksjonen setter et rektangel som vil fungere som en hit boks for foretaket. De to første parametre er bredden og høyden av esken. De neste to parametere (tillegg) er de opprinnelse koordinater (X og Y) i rektangelet. Gjøre det samme for GameEntity: Nå som vi har både vår enhet og boksen satt opp med hitboxes, må vi se etter kollisjoner i verdensklasse: collideWith () -funksjonen sjekker kollisjon med foretaket vedtatt som et argument, nesten plassere den første enheten (i dette tilfellet, _gameEntity) i den posisjonen som er angitt av den andre og tredje argumenter. Når en kollisjon blir detektert, må det være en respons på den. Vi vil bare endre plasseringen av den bevegelige enhet: Ta en titt på f.eks. Prøv å flytte virksomheten inn i boksen FlashPunk ikke har noen knapper som standard. Nesten alle spill trenger knapper, så i dette trinnet vil vi skape en knapp klasse. Først av alt, har en knapp tre stater (som du kanskje vet fra felles Flash utvikling): "Up", "Over" og "ned". Dette spritesheet illustrerer at: Og nå la oss starte klassen: setSpritemap () -funksjonen setter en spritemap for knappen og sett "animasjoner" for knappen. Alltid bildet må ha først på "Up" ramme, deretter "Over", etterfulgt av "Down" ramme. Det er også et kall til setHitbox (). Den hitbox skal brukes til å sjekke om musa er eller ikke er over knappen eske Nå som vi har vår Button hell viser et bilde, er det på tide å lage opp, over og ned kontrollene. Vi vil gjøre det ved å opprette to boolske attributter: "over" og "klikket". Vi vil også oppdage om musen er over knappens hit boksen eller ikke. Legg disse funksjonene i Button.as: Og ikke glem å importere net.flashpunk.utils.Input Etter logikken i oppdateringen (): først av alt, både attributter (_clicked og _over. ) er satt til false. Etter det sjekker vi om musa er over knappen. Hvis det ikke er det, vil attributtene forbli falsk og knappen vil være i "Up" tilstand. Hvis musen er over, sjekker vi om museknappen er for øyeblikket nede. Hvis det er sant, er knappen i "Down" stat og _clicked er satt til true; hvis det er falsk, deretter på knappen er i "Over" staten og den _over attributt er satt til true. Disse egenskapene vil definere som ramme spritemap bør gå til. Denne knappen vil være ubrukelig hvis du ikke kan oppdage når brukeren har effektivt klikket den. La oss endre klassen litt for å støtte tilbakeringing funksjoner: Vår knappen er ferdig! Denne koden vil tillate deg å passere en tilbakeringingsfunksjonen (og eventuelt et argument) til knappen, så når brukeren klikker på knappen, vil funksjonen bli kalt Mange trinn og ingenting på skjermen ... På tide å sette en knapp på det! Det er så enkelt som å legge inn denne koden i GameWorld.as: product: [Embed (kilde = "/../img/ButtonSheet.png")]private konst BUTTONSHEET: Klasse, private Var _button: Button, offentlig funksjon spillverden () {_gameEntity = new GameEntity (); _box = ny Box (); _button = new Button (onButtonClick, null); _button.setSpritemap (BUTTONSHEET, 50, 40); legge (_gameEntity); legge (_box); legge (_button); _box.x = 200; _box.y = 150; _button.x = 400; _button.y = 200; addGraphic (new Image (BILDE), 0, 50, 50);} private funksjon onButtonClick (): void {FP.screen.color = Math.random () * 0xFFFFFF; trace ("! Knappen har blitt klikket");} Nå er alt du trenger å gjøre er å kompilere prosjektet og knappen vil være der Og nå den siste funksjonen fra FlashPunk som vil bli presentert i denne opplæringen! Konsollen er FlashPunk verktøy for debugging: det har logger, som er ganske mye som spor; viser den tid det tar å kjøre motoren viktig skritt; og viser hvor mange enheter er på skjermen og den nåværende FPS. Det er et flott verktøy å bruke når du utvikler spillet ditt. For å aktivere den, bare legge til følgende linje til Main.as: Og for å logge noe i den, bruker FP.log () -funksjonen. For eksempel, la oss endre det trace () kall: Det er ganske mye det! Du vil se at "Output" del fra debugging konsollen viser nå loggen. Du kan gå videre og forandrer seg hele trace () kaller i vår kode for å ringe til FP.log (). Og det er vår introduksjon til FlashPunk, som dekker det meste viktige aspekter ved denne fantastiske bibliotek: enheter, verdener, bilder og animasjoner; kollisjon, knapper, innspill og bevegelse. Jeg håper du vil like dette biblioteket så mye som jeg gjør - det som virkelig gjør arbeidet lettere Anmeldelser
lagt til dem. Grafikken er bilder som ikke trenger å bli oppdatert av deg (FlashPunk skaper fortsatt en enhet for å legge dem til verden, slik at motoren vil likevel sende et anrop til en oppdatering () -funksjonen). Du kan legge dem ved å ringe addGraphic ()
[Embed (kilde = "/../img/EntityImage2.png")]private konst IMAGE: Klasse; offentlig funksjon spillverden () {_gameEntity = new GameEntity (); legge (_gameEntity); addGraphic (new Image (BILDE), 0, 50, 50);} overstyre offentlig funksjon oppdateringen (): void {super.update (); Var entityArray: Array = []; getType ("GameEntity", entityArray); for hver (var enhet: Entity i entityArray) {entity.x = entity.x > 550? 550: entity.x; entity.y = entity.y > 400? 400: entity.y; }}
Trinn 9: Animasjoner
[Bygg (kilde = "/../img/EntitySheet.png")]private konst BLAD: Klasse, private Var _timeInterval: Number; offentlig funksjon GameEntity () {grafisk = new Spritemap (BLAD, 40, 20, onAnimationEnd); Spritemap (grafisk) .Legg ("Stoppet", [0]); Spritemap (grafisk) .Legg ("blinkende", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 24); Input.define ("UP", Key.W, Key.UP); Input.define ("DOWN", Key.S, Key.DOWN); Input.define ("venstre", Key.A, Key.LEFT); Input.define ("riktig", Key.D, Key.RIGHT); type = "GameEntity"; Spritemap (grafisk) Beskytt din Nintendo DS ("Blinker");} private funksjon onAnimationEnd (): void {Spritemap (grafisk) Beskytt din Nintendo DS ("Stoppet"); _timeInterval = 0;} overstyre offentlig funksjon oppdateringen (): void {_timeInterval + = FP.elapsed; if (_timeInterval > = 3) {Spritemap (grafisk) Beskytt din Nintendo DS ("Blinker"); } If (Input.check ("VENSTRE")) {x - = 50 * FP.elapsed; } Else if (Input.check ("HØYRE")) {x + = 50 * FP.elapsed; } If (Input.check ("UP")) {y - = 50 * FP.elapsed; } Else if (Input.check ("DOWN")) {y + = 50 * FP.elapsed; }}
Trinn 10: Kollisjon
pakke {import net.flashpunk.Entity; import net.flashpunk.graphics.Image; public class Box strekker Entity {[Bygg (kilde = "/../img/BoxImage.png")] privat konst BILDE: Klasse; offentlig funksjon Box () {grafisk = new Image (BILDE); setHitbox (60, 60); }}}
private Var _box: Box; offentlig funksjon spillverden () {_gameEntity = new GameEntity (); _box = ny Box (); legge (_gameEntity); legge (_box); _box.x = 200; _box.y = 150; addGraphic (new Image (BILDE), 0, 50, 50);}
offentlig funksjon GameEntity () {grafisk = new Spritemap (BLAD, 40, 20, onAnimationEnd); Spritemap (grafisk) .Legg ("Stoppet", [0]); Spritemap (grafisk) .Legg ("blinkende", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 24); Input.define ("UP", Key.W, Key.UP); Input.define ("DOWN", Key.S, Key.DOWN); Input.define ("venstre", Key.A, Key.LEFT); Input.define ("riktig", Key.D, Key.RIGHT); type = "GameEntity"; Spritemap (grafisk) Beskytt din Nintendo DS ("Blinker"); setHitbox (40, 20);}
styre offentlig funksjon oppdateringen (): void {super .update (); Var entityArray: Array = []; getType ("GameEntity", entityArray); for hver (var enhet: Entity i entityArray) {entity.x = entity.x > 550? 550: entity.x; entity.y = entity.y > 400? 400: entity.y; } If (_gameEntity.collideWith (_box, _gameEntity.x, _gameEntity.y)) {trace ("Collision!"); }}
styre offentlig funksjon oppdateringen (): void {super.update (); Var entityArray: Array = []; getType ("GameEntity", entityArray); for hver (var enhet: Entity i entityArray) {entity.x = entity.x > 550? 550: entity.x; entity.y = entity.y > 400? 400: entity.y; } If (_gameEntity.collideWith (_box, _gameEntity.x, _gameEntity.y)) {_gameEntity.x = _gameEntity.y = 0; }}
Trinn 11:. Lage en enkel knapp - Legge et bilde
pakke {import net.flashpunk.Entity; import net.flashpunk.graphics.Spritemap; public class Button strekker Entity {beskyttet Var _map: Spritemap; offentlig funksjon Button (x: Antall = 0, y: Number = 0) {super (x, y); } Offentlig funksjon setSpritemap (eiendel: *, frameW: uint, frameH: uint): void {_map = new Spritemap (eiendel, frameW, frameH); _map.add ("Up", [0]); _map.add ("over", [1]); _map.add ("Down", [2]); grafisk = _map; setHitbox (frameW, frameH); } Overstyre offentlig funksjon render (): void {super.render (); }}}
Trinn 12:. Lage en enkel knapp: Opp /Over /Down kontroller, tilbakeringing
beskyttet Var _over: Boolean, beskyttet Var _clicked: Boolean; styre offentlig funksjon oppdateringen (): void {if (! Verden) {return; } _over = False; _clicked = false; if (collidePoint (x - world.camera.x, y - world.camera.y, Input.mouseX, Input.mouseY)) {if (Input.mouseDown) {mousedown (); } Else {mouse (); }}} Beskyttet funksjon mouse (): void {_over = true;} beskyttet funksjon mousedown (): void {_clicked = true;} overstyre offentlig funksjon render (): void {if (_clicked) {_map.play ("Down" ); } Else if (_over) {_map.play ("Over"); } Else {_map.play ("Up"); } Super.render ();}
beskyttet Var _callback: Funksjon, beskyttet Var _argument: *; offentlig funksjon knapp (tilbakeringing: Funksjon, argument: *, x: Antall = 0, y: Number = 0) {super (x, y); _callback = tilbakeringing; _argument = argument;} overstyre offentlig funksjon oppdateringen (): void {if (verden!) {return; } _over = False; _clicked = false; if (collidePoint (x - world.camera.x, y - world.camera.y, Input.mouseX, Input.mouseY)) {if (Input.mouseReleased) {klikket (); } Else if (Input.mouseDown) {mousedown (); } Else {mouse (); }}} Beskyttet funksjon klikket (): void {if (! _argument) {_callback (); } Else {_callback (_argument); }}
Trinn 13:. Lage en enkel knapp : Legge den til skjermen
Trinn 14: Console
!
styre offentlig funksjon init (): void {trace ("! Spillet har startet"); FP.console.enable (); FP.world = _gameWorld;}
styre offentlig funksjon init (): void {FP.console.enable (); FP.log ("Spillet er i gang!"); FP.world = _gameWorld;}
Konklusjon