skabe et komplet maskinskrivning spil i flash med as3

, skabe en komplet maskinskrivning spil i flash med as3,,,,, 7,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,,, der fører fra min tidligere forelæsning om påvisning af tastatur band, får vi at se, hvordan til at bygge en hel kamp, at prøver din skrivning færdigheder.,,,, endelige resultat forpremiere, lad os tage et kig på det endelige resultat, vi arbejder hen imod:,,, bogstaverne på skærmen til type engelsk ord!ugyldig ord vil miste de punkter, så pas på.,,, trin 1: indledning i denne forelæsning, vi vil arbejde på et meget fedt på spil med denne meget nyttige combo påvisning klasse.det er meget anbefalede, at du læser, at ministeriet, inden vi fortsætter, så forstår du, hvad denne klasse vil gøre i vores spil. i vores kamp, vi vil få mange blokke med bogstaver på skærmen, og de spiller til at skrive et ord er skabt med det brev blokke.hvis det er gyldigt, blokke, fjernes, og det bliver punkter og mere tid til at lege.spillet slutter, når den tid kommer, nul. hvis du vil helt efter denne forelæsning, skal du tage den kilde filer.,, trin 2: tilføjelse af billederne i flash professionelle, således som det var tilfældet i den tidligere nævnte forelæsning, vil vi tilføje alle billeder til vores kamp i en flash professionel. fia - fil, så skaber en. swc fil, som vil blive sat ind i vores flashdevelop projekt til brug. for denne forelæsning, har vi brug for en baggrund image (tak for petr kovar for sejt træ baggrund.)en generisk blok billede med udvalgte ramme og i øjeblikket har nøgler.man kan finde alt, der findes i vores kilde filer.,,, andre billeder, som f.eks. preloader og spillet over skærmen, lægges så godt, men de vil blive foretaget i løbet af den pædagogiske, da det giver mere mening at gøre det.,, trin 3: letterblock, før vi kan begynde at arbejde på vores kode, lad os sætte vores flashdevelop projekt.det her bliver en as3 projekt med preloader, så vælge denne mulighed for flashdevelop!hvis du har læst det band forelæsning, du ved sikkert, hvordan at tilføje en. swc fil til flashdevelop er bibliotek.hvis du ikke bare right-click og udvælge "tilføjer bibliotek".tag den. swc fil fra kilden og tilføje det.det er det.tid til handling.vores brev block vil være en simpel objekt med et textfield i det og blokere image som vist i trin 2.kodning, der er simpelt.skabe, letterblock, klasse:, pakke (import artassets.letterblockimage; import flash.display.movieclip; import flash.display.sprite; import flash.text.textfield; import flash.text.textformat; import flash.text.textformatalign; offentlige klasse letterblock udvider sprite (private var _image: movieclip; private var _lettertext: textfield; offentlig funktion letterblock() {_image = nye letterblockimage(); _image. stop(); _lettertext = nye textfield(); _lettertext.defaulttextformat = nye textformat ("verdana", 40, 0xffffff, sandt, nul, nul, nul, nul, textformatalign. center); _lettertext.width = 60; _lettertext. x = - 30; _lettertext. y = - 26,3; _lettertext.selectable = falske _lettertext.multiline = falske addchild (_image); addchild (_lettertext)} offentlig funktion setletter (brev: string): ugyldig (_lettertext.text = brev;}}}, linje 21 - 28 skabe tekstfeltet til at holde vores brev tekst samt position på skærmen, og give det en skrifttype. skrifttype, farve og størrelse.det, setletter, funktion er kun anvendes til at fastsætte den skrivelse af kassen.,, trin 4: indlæsning af ord, hver på spil har brug for ord at arbejde med.i dette skridt, vi læsser en ekstern fil gennem [omfatter], mærke og arbejde med oplysninger om sagen.det er klart, at denne sag indeholder ord, der anvendes i vores spil.det er til rådighed i kilden filer.også i dette skridt, vi begynder at arbejde med, combohandler, klasse, så tilføje det i din flashdevelop projekt såvel!lad os se på nogle kode:, i de vigtigste.:, privat funktion lokalitet (e: begivenhed = null): ugyldig (removeeventlistener (event.added_to_stage, lokalitet); combohandler. påbegynd (tidspunkt); dictionarywords. loadwords();}, linje 5 ovenfor initializes, combohandler, som kræves og linje 7 kalder det, loadwords(), metode fra det, dictionarywords, klasse.denne klasse vil være skabt af os, og dets kode er lige under:, pakke (offentlige klasse dictionarywords {[omfatter (kilde: "... /src /ord. txt" mimetype - = "anvendelse /oktet stream")] menig static var _words: klasse; offentlige statisk funktion loadwords(): ugyldig (var - ord: kæde = nye _words(), var wordsarray: array = ord. split ("), n"), var jeg: int. var længde: int = wordsarray.length; for (i = 0. jeg < længde; jeg + +) (combohandler. registercombo (wordsarray [i], turnintoletters (wordsarray [i])}} menig static funktion turnintoletters (ord: string): system {var bogstaver: array = ord. split (""); hvis (breve [0] = = ") (breve. shift();}hvis (breve [letters.length - 1] = = ") (breve. pop();} var jeg: int. (i = 0. jeg < letters.length; jeg + +) (breve [i] = streng (breve [i]). charcodeat (0)} tilbage breve.}}}, linje 5 er den linje, som mange eksterne fil, og læg det på spil ved udarbejdelse af tid.alt dette er muligt på grund af den [omfatter], tag.hvis du vil have yderligere oplysninger om det, jeg anbefaler denne god artikel om adobe livedocs. her er en del af, ord. txt,, så du kan se, hvad vi arbejder med, abbreviator abc abcoulomb abc abdias abdicable abdicere opgivelse abdicator abdomen abdominal abdominocentesis abdominoplasty, linje 12 (af dictionarywords. som) er en meget vigtig linje.det gør alle ordene fra words.txt, som var oplagret i en snor, at elementer i et system.da hvert ord er adskilt af en newline karakter, vi kunne kalde den, split(), metode af, snor, klasse.,, turnintoletters, funktion bliver et ord i en vifte, med de vigtigste regler for hvert brev.på den måde, vores, combohandler, klasse kan arbejde med det.,, løntrin 5: forøgelse af brev blokke til skærmen, nu hvor vi har vores ord parat med i spillet, det er tid til at begynde at arbejde på at sætte bogstaverne på skærmen.det er meget enkelt.for det første har vi brug for en kamp på skærmen.det, gamescreen, klasse vil indeholde alle logikken i vores spil, pakke (import artassets.backgroundimage; import flash.display.sprite; import adobe.utils.customactions; offentlige klasse gamescreen udvider sprite (private var _background: backgroundimage; private var _blocksonscreen: vector. < letterblock > offentlig funktion gamescreen() {_background = nye backgroundimage(); _background). = 275; _background. y = 200; addchild (_background); _blocksonscreen = nye vektor. < letterblock > c); populateblocks();} privat funktion populateblocks(): ugyldig (var - jeg: int. var tempblock: letterblock; for (i = 0. jeg < 8; jeg + +) (tempblås = nye letterblock(); tempblock. x = 130 + (i%) * 95); tempblock. y = 80 + int (i /4) * 80; tempblock. setletter (randomletter()); addchild (tempblock); _blocksonscreen. tryk (tempblock); tempblock = ugyldig;}} privat funktion randomletter(): string (tilbagevenden snor. fromcharcode (int (matematik. random() * 26) + 65)}}}, _blocksonscreen, vektor er det vigtigste element i denne kode: den vil indeholde alle blokke på skærmen, der giver os mulighed for at arbejde sammen med dem, når vi har lyst.bemærker, at i overensstemmelse med 14 vi tilføje, backgroundimage på skærmen, som er et grafisk fra. swc fil. i, populateblocks(), funktion, alt det, vi gør, er at tilføje en ny, letterblock, til en bestemt holdning, giv det en tilfældig brev (som er genereret af, randomletter(), funktion), og der tilsættes det på skærmen. nu skal vi tilføje spillet tv, main, barn.indenfor primære.: private var _gamescreen: gamescreen; private funktion lokalitet (e: begivenhed = null): ugyldig (removeeventlistener (event.added_to_stage, lokalitet); combohandler. påbegynd (tidspunkt); dictionarywords. loadwords(); _gamescreen = nye gamescreen(); addchild (_gamescreen)}, udarbejdelse af projektet, og du vil være i stand til at se de blokke på skærmen!,, trin 6: udvælgelse af en blok efter en nøgle, presse, i vores kamp, vi vil alle gå til dets "udvalgt" image, når den tilsvarende nøgle er blevet presset.det er meget let at gøre.gå til letterblock.as fil og tilføje denne kode: private var _selected: boolean, offentlig funktion select(): ugyldig (_selected =!_selected; _image. gotoandstop (_selected = = sandt? "udvalgte ":" ikke - selekterede ");} offentligheden få letter(): string (tilbage _lettertext.text;} offentligheden få selected(): boolean {tilbage _selected;}, _selected, variable vil blive anvendt på spillets logik, at kontrollere, om en blok er udvalgt eller ej.det samme sker med brev. det eneste, der er tilbage, er at gøre den blok, skifte mellem "udvalgt" og "ikke - selekterede" nu.i gamescreen.:, import flash.events.event; import flash.events.keyboardevent; //* *. * * offentlige funktion gamescreen() {_background = nye backgroundimage(); _background. x = 275; _background. y = 200; addchild (_background); _blocksonscreen = nye vektor. < letterblock > c); populateblocks(); addeventlistener (event.added_to_stage, på scenen)} privat funktion på scenen e: begivenhed): ugyldig (removeeventlistener (event.added_to_stage, på scenen) fase. addeventlistener (keyboardevent.key_down, onkeydown)} privat funktion onkeydown e: keyboardevent): ugyldig (var - jeg: int. (i = 0. jeg < _blocksonscreen.length; jeg + +) (hvis (_blocksonscreen [i]. brev = = streng. fromcharcode (e.keycode)& &!_blocksonscreen [i]. udvalgte) (_blocksonscreen [i]. select(); pause.}}}, i betragtning af, at vi bør tilføje vores, keyboardevent, lyttere for trin i, gamescreen, er konstruktøren, tilføjer vi en til at lytte til begivenhed. added_to_stage,, som vil føre os til den, onstage(), funktion.denne funktion er den lytter til scenen.det, onkeydown(), funktion er ansvarlig for over alle vores gader på skærmen, og at kontrollere, om der er en blok med bogstavet presset.i bekræftende fald, så bør vi vælge det, som er sket i linje 36. efter udarbejdelsen af projektet, det er, hvad vi får:,, (presse nøglerne på dit tastatur.,, trin 7: ændringer i combohandler klasse, for i vores kamp for at arbejde i den retning, som vi ønsker, vi bliver nødt til at gøre nogle ændringer til, combohandler, klasse fra den foregående tutor.den første ændring er at gøre den i stand til at kun at kontrollere en combo, når brugeren har holdt op med at skrive.dette vil blive påvist, med, max_interval, konstant og gennem en, update(), funktion.også, når brugeren har type det præcise ord breve for at "fuldstændigt" det vil vi ændre, hvor vi undersøger, om en kombination med nøglerne, pressedkeys, vifte.den sidste ændring er at sende en begivenhed, selv når de ord skrevet, er forkert.dette vil gøre det muligt for vores spil, til påvisning af deres fejl og straffe ham for. alle kode nedenfor gør det blev forklaret: i combohandler.:, menig static i denne max_interval: int = 500; //millisekunder menig static var checkcomboafterclearing: boolean, offentlige statisk funktion, påbegynd (stagereference: fase, checkcomboafterclearing: boolean - = falske): ugyldig (band = nye dictionary(); intervallet = 0; - = nye eventdispatcher(); combohandler.checkcomboafterclearing = checkcomboafterclearing; pressedkeys = [...], stagereference. addeventlistener (keyboardevent.key_down, onkeydown)} menig static funktion onkeydown e: keyboardevent): ugyldig (hvis (gettimer() - interval > max_interval) (pressedkeys = []} interval = gettimer(); pressedkeys. tryk (e.keycode); hvis (!checkcomboafterclearing) (checkforcombo();}} offentlige statisk funktion update(): ugyldig (hvis (gettimer() - interval > max_interval) (checkforcombo(); pressedkeys = []}} menig static funktion checkforcombo(): ugyldig (hvis (pressedkeys.length = = 0) (tilbage;} var jeg: int. var combofound: string = ""; (var - comboname: snor i band) (hvis (band [comboname] som array). længde = = 0) (fortsat)} hvis (pressedkeys. med ("") = = (band [comboname] som array). med ("") (combofound = comboname, pause.) ////////////////(combofound combo fundet!= ") ///////////pressedkeys = [] kurer. dispatchevent (nye comboevent (comboevent.combo_finished, (comboname: combofound})); //), ændrede vi vores combohandler er konstruktøren erklæring, således at vi tjekke band kun, efter at brugeren har holdt op med at skrive.det er verificeret, update(), funktion, idet den, max_interval, konstant.også de, checkforcombo(), funktion er blevet ændret for at bruge en mere passende kombination kontrol. nu må vi også ændre den, gamescreen, klasse at ajourføre, combohandler, klasse: offentlig funktion gamescreen() {_background = nye backgroundimage(); _background. x = 275; _background. y = 200; addchild (_background); _blocksonscreen = nye vektor. < letterblock > c); populateblocks(); addeventlistener (event.added_to_stage, på scenen); addeventlistener (event.enter_frame, gameloop)} privat funktion gameloop e: begivenhed): ugyldig (combohandler. update();}, ajourføringen sker gennem en, event.enter_frame, begivenhed til at lytte, da det er en enkel og godt. den sidste ændring er at ændre vores initiativerlize, combohandler, klasse i, klasse: vigtigste, private funktion lokalitet (e: begivenhed = null): ugyldig (removeeventlistener (event.added_to_stage, lokalitet); combohandler. påbegynd fase, sande); dictionarywords. loadwords(); _gamescreen = nye gamescreen(); addchild (_gamescreen)}, ved hjælp af spillet, det er, hvad vi får:,, trin 8: tilføjelse af ordet boks, det er tid til at give ham noget andet til at stole på.lige nu, spiller, kan ikke se sekvensen af breve, som allerede er skrevet, så lad os sige endnu et par ord rubrik i spillet.denne rubrik skal indeholde de i øjeblikket har skrevet breve, tilrettelagt af orden, og der vil blive renset, når en combo begivenhed har modtaget.skabe, wordbox, klasse og tilføje denne kode til det:, pakke (import artassets.typedlettersboximage; import flash.display.sprite; import flash.text.textfield; import flash.text.textformat; import flash.text.textformatalign; offentlige klasse wordbox udvider sprite (private var _image: sprite; private var _textfield: textfield; offentlig funktion wordbox() {_image = nye typedlettersboximage(); _textfield = nye textfield(); _textfield.defaulttextformat = nye textformat ("verdana", 30, 0xffffff, sandt, nul, nul, nul, nul, textformatalign. center); _textfield.width = 500; _textfield. x = - 250. _textfield. y = - 25; _textfield.selectable = falske _textfield.multiline = falske._textfield.text = "." addchild (_image); addchild (_textfield)} offentlig funktion addletter (brev: string): ugyldig (_textfield. appendtext (skrivelse)} offentlig funktion clear(): ugyldig (_textfield.text = ""}}} denne klasse er næsten den samme som den, letterblock, klasse, - ingen omfattende forklaring er nødvendig.det eneste, der fortjener opmærksomhed, er linje 35, som indeholder en opfordring til, appendtext(), metode fra, snor, klasse.denne funktion vil tilføje tekst til udløbet af den nuværende tekst, der giver os mulighed for at vise de skrev breve til udgangen af den nuværende tekst fra ordet kasse. nu er det på tide at tilføje ordet rubrik i spillet.gå til gamescreen.as og tilføje denne kode: private var _wordbox: wordbox; offentlig funktion gamescreen() {_background = nye backgroundimage(); _background. x = 275; _background. y = 200; addchild (_background); _blocksonscreen = nye vektor. < letterblock > c); populateblocks(); _wordbox = nye wordbox(); _wordbox x = 275; _wordbox. y = 350; addchild (_wordbox); addeventlistener (event.added_to_stage, på scenen); addeventlistener (event.enter_frame, gameloop)} privat funktion onkeydown e: keyboardevent): ugyldig (var - jeg: int. (i = 0. jeg < _blocksonscreen.length; jeg + +) (hvis (_blocksonscreen [i]. brev = = streng. fromcharcode (e.keycode) & &!_blocksonscreen [i]. udvalgte) (_blocksonscreen [i]. select(); _wordbox. addletter (_blocksonscreen [i]. brev); pause.}), 1, 15 - 17 og 19, skabe ordet kasse og få det op på skærmen.linje 36 kalder, addletter(), funktion at tilføje et brev i kassen. resultatet af dette skridt er nedenfor.vi vil tilføje, at kodeksen klart ordet rubrik i det næste skridt, skridt 9: integration af vores combohandler med vores gamescreen, lige nu, er den eneste ændring, der er blevet gjort i, combohandler, kun ændret, hvornår og hvordan til at kontrollere band.det er den del, der, det bliver sjovt. vi vil integrere vores, combohandler i spillet.dette betyder, at vores, combohandler, vil afhænge af, gamescreen, med henblik på at løbe.lad os hoppe til den kode, og se forklaringerne efter det!i gamescreen.: offentlige funktion gamescreen() {_background = nye backgroundimage(); _background. x = 275; _background. y = 200; addchild (_background); _blocksonscreen = nye vektor. < letterblock > (8); populateblocks(); _wordbox = nye wordbox(); _wordbox. x = 275; _wordbox. y = 350; addchild (_wordbox); addeventlistener (event.added_to_stage, på scenen); addeventlistener (event.enter_frame, gameloop); combohandler. afsender. addeventlistener (comboevent.combo_finished, onwordfinished); combohandler. setgameinstance (det)} privat funktion onwordfinished e: comboevent): ugyldig (_wordbox. clear();} offentlig funktion iskeyavailable (nøgle: serie): boolean (var - jeg: int. (i = 0. jeg < _blocksonscreen.length; jeg + +) (hvis (_blocksonscreen [i]. brev = = central & &!_blocksonscreen [i]. udvalgte) {tilbage.}} tilbage falske} privat funktion populateblocks(): ugyldig (var - jeg: int. var tempblock: letterblock; for (i = 0. jeg < 8; jeg + +) (tempblock = nye letterblock(); tempblock. x = 130 (+ -% 4) * 95); tempblock. y = 80 + int (i /4) * 80; tempblock. setletter (randomletter()); addchild (tempblock); _blocksonscreen [i] = tempblock; tempblock = ugyldig;}}, indenfor, gamescreen, er konstruktøren tilføjede vi en begivenhed til at lytte til, combohandler, er han protesterer, og ringede, setgameinstance(), funktion for denne klasse (der vil blive tilføjet nedenfor).dette vil give den aktuelle tilfælde af spillet skærm til, combohandler, klasse og klare ord. der er også en, iskeyavailable, funktion, der er skabt.det vil blive kaldt i kombination fører til at efterprøve, om den kan tilføje en nøgle til listen over presset nøgler., 63, er blot et fix til ændringen i, _blocksinscreen, konstruktøren., tag et kig på kode at tilføje i combohandler.:, menig static var gameinstance: gamescreen; offentlige statisk funktion setgameinstance (gameinstance: gamescreen): ugyldig (combohandler.gameinstance = gameinstance;} menig static funktion onkeydown e: keyboardevent): ugyldig (hvis (gettimer() - interval > max_interval) (pressedkeys = []} hvis (gameinstance. iskeyavailable (snor. fromcharcode (e.keycode)) (interval = gettimer(); pressedkeys. tryk (e.keycode)} hvis (!checkcomboafterclearing) (checkforcombo();}}, i fremhævet overensstemmelse tilføjer vi en opfordring til, iskeyavailable(),, der er med i spillet skærm instans opbevares i, combohandler, klasse.dette er slutningen på integration mellem spil og combo kontaktperson. efter at udarbejde, vil de bemærke, at kampen nu godkender ordet rubrik efter pausen er forbi:,, trin 10: handle, når et ord er blevet skrevet i dette skridt, vil vi gøre spillet handle, når et ord er blevet opdaget.for det første har vi brug for at vide, når et ord er blevet opdaget.lad os finde ud af hvor: i gamescreen.: offentlige funktion gamescreen() {_background = nye backgroundimage(); _background. x = 275; _background. y = 200; addchild (_background); _blocksonscreen = nye vektor. < letterblock > (8); populateblocks(); _wordbox = nye wordbox(); _wordbox. x = 275; _wordbox. y = 350; addchild (_wordbox); addeventlistener (event.added_to_stage, på scenen); addeventlistener (event.enter_frame, gameloop); combohandler. afsender. addeventlistener (comboevent.combo_finished, onwordfinished); combohandler. setgameinstance (det)} privat funktion onwordfinished e: comboevent): ugyldig (hvis (e.params.comboname!= ") (removeselectedletters(); populateblocks(); _wordbox. clear();}} privat funktion removeselectedletters(): ugyldig (var - jeg: int. (i = 0. jeg < 8; jeg + +) (hvis (_blocksonscreen [i]. udvalgte) (removechild (_blocksonscreen [i]); _blocksonscreen [jeg] = ugyldig;}}} privat funktion populateblocks(): ugyldig (var - jeg: int. var tempblock: letterblock; for (i = 0. jeg < 8; jeg + +) (hvis (_blocksonscreen [i] = = null) (tempblock = nye letterblock(); tempblock. x = 130 + ((jeg% 4) * 95); tempblock. y = 80 + int (i /4) * 80; tempblock. setletter (randomletter()); addchild (tempblock); _blocksonscreen [i] = tempblock;} tempblock = ugyldig;}}i linje 23. der er en begivenhed til at lytte til, comboevent. combo_finished,.denne begivenhed vil blive fyret, hver gang et ord er blevet dannet, eller når de spiller er savnet.hvis du går tilbage til combohandler.as, vil de bemærke, at når de spiller savner, navnet på den kombination i fyret begivenhed vil være ugyldig, eller "".på grund af det, vi gør lige linjer, 28 - 34.det, removeselectedletters(), funktion, vil fjerne alle udvalgte breve, eftersom den aktør har dannet et ord, når det er nødvendigt.vi er også ændret, populateblocks(), funktion, at kun en ny blok på steder, hvor der ikke er nogen blok - her er, hvad vi gør i funktion for at fjerne blokke. udarbejde spillet, og det er resultatet:,, trin 11: gør noget, når de spiller former et forkert ord, har du nogen tanken om, hvad de skal gøre, når en spiller ikke et ord?jeg tænkte på at tage tid og score fra aktør (dette vil blive gjort i senere trin), samt at give en 30% chance for at ændre en udvalgt brev fra misstyped ord.den kode nedenfor gør det sidste.gå til gamescreen.:, privat funktion onwordfinished e: comboevent): ugyldig (hvis (e.params.comboname!= ") (removeselectedletters (forkert)} andre (removeselectedletters (korrekt)} populateblocks(); _wordbox. clear();} privat funktion removeselectedletters (wasfromfailure: boolean): ugyldig (var - jeg: int. (i = 0. jeg < 8; jeg + +) (hvis (_blocksonscreen [jeg]. udvalgte) (hvis ((wasfromfailure & & matematik. random() < 0, 3)



Previous:
Next Page: