Welkom bij het tweede deel van onze tutorialserie over het bouwen van een Galgje-spel voor de iPad met Flash. Hoewel de eerste zelfstudie voornamelijk was gericht op het instellen van iOS-apps om code te coderen met Flash, zal deze zelfstudie zich richten op het ActionScript en de spellogica die nodig is om Hangman daadwerkelijk te programmeren. Laten we beginnen!
In het eerste deel van deze tutorialserie hebben we het apparaatconfiguratieproces doorlopen, een app-pictogram en laadscherm toegevoegd en de app tijdens de ontwikkeling gesynchroniseerd met uw iPad. In dit deel van de tutorial beëindigen we het coderen van de gameplay.
In deze zelfstudie wordt het TweenLite-project opgenomen, dus ga je gang en neem een exemplaar. Als je het eenmaal hebt gedownload, pak je het uit en voeg je de map "com" toe aan dezelfde map waarin je beul-project zich bevindt. Voeg ten slotte het volgende toe samen met de rest van je projectimport:
import com.greensock.TweenLite;
Selecteer het tekstgereedschap, zorg dat het TextField niet kan worden geselecteerd en dat de volgende eigenschappen zijn ingesteld:
Teken een TextField uit op het podium en stel de volgende eigenschappen in:
Geef het de instantienaam "guess_word_text".
Selecteer het ovaalgereedschap en zorg ervoor dat de volgende eigenschappen zijn ingesteld:
Houd "Shift" ingedrukt om het ovaal in een cirkel te passen en een cirkel naar het werkgebied te slepen.
Sleep met het "Selectiehulpmiddel" rond de cirkel om zowel de vulling als de streek te selecteren. Je kunt zien dat ze allebei geselecteerd zijn door een "Hatch-patroon".
Als zowel de vulling als de streek is geselecteerd, geeft u de cirkel de volgende eigenschappen:
Klik nu met de rechtermuisknop op de cirkel en kies "Converteren naar symbool". Geef het de naam "GameButton", zorg ervoor dat "Exporteren voor Actionscript" is aangevinkt en
dat de klasse is ingesteld op "GameButton".
Dubbelklik er nu op om naar de bewerkmodus te gaan. Selecteer het tekstgereedschap en zorg dat de volgende eigenschappen zijn ingesteld:
Sleep een TextField naar de MovieClip en stel de volgende eigenschappen in:
Zorg ervoor dat het TextField niet selecteerbaar is:
Geef het TextField de instantienaam "game_btn_text".
Schrap nu de Cirkel van het podium.
Ga naar Bestand> Nieuw en kies "Actionscript File". Sla deze op als "GameButton.as" in dezelfde map als je "Hangman.fla".
Voer de volgende code in de "GameButton.as" in.
pakket import flash.text.TextField; import flash.display.MovieClip; openbare klasse GameButton breidt MovieClip uit openbare functie GameButton () this.game_btn_text.selectable = false; this.mouseChildren = false; public function setText (theText: String): void this.game_btn_text.text = theText; openbare functie getText (): String return this.game_btn_text.text; public function disable (): void this.mouseEnabled = false; trace ( "JA");
Hier importeren we de klassen die we nodig hebben, stel de game_button_text
om niet selecteerbaar te zijn, in te stellen mouseChildren
onwaar dus de
TextField kan Mouse Events niet ontvangen, enkele methoden voor getter en setter toevoegen om de tekst in het TextField in te stellen, en een uitschakelen ()
functie
die ervoor zorgt dat de knoppen geen muisgebeurtenissen meer ontvangen. Zoek en zet de tekst op de game_btn_text
.
Open "Main.as" die u beschikbaar zou moeten hebben bij deel 1. Voeg de volgende import toe aan de bovenkant, onder de pakketverklaring:
import flash.events.MouseEvent; import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.Event; import flash.display.Sprite;
Dit zijn de lessen die we in deze les nodig zullen hebben
Voer de onderstaande code net onder in openbare functie Main breidt MovieClip uit
:
public class Main breidt MovieClip uit // Gebruikt voor de TextFields op onze spelknoppen var alphabetArray = ["A", "B", "C", "D", "E", "F", "G", "H "," I "," J "," K "," L "," M "," N "," O "," P "," Q "," R "," S "," T ", "U", "V", "W", "X", "Y", "Z"]; // Het oorspronkelijke woord var theWord: String; // De gissing Word var guessWord: Array; // Een array voor onze gameknoppen var gameButtonArray: Array = new Array (); // Dit bevat alle woorden var wordList: Array; // A Sprite we the hangman into var hangmanContainer: Sprite; // Aantal verkeerde schattingen var numWrong: int = 0;
Voer de volgende code onder de openbare functie Hoofd ()
constructor:
private function setupGameButtons (): void var xPos = 150; var yPos = 600; gameButtonArray = new Array (); for (var i: int = 0; iWe verklaren eerst twee variabelen
xpos
enYPOS
. Deze bevatten de beginposities van onze GameButtons. We instantiëren hetnaar een nieuwe array. Vervolgens doorlopen we de
gameButtonArrayalphabetArray
, een nieuwe GameButton maken. We controleren ofik
is gelijk aan
8 of 16, en als dat het geval is, verhogen we deYPOS
verander met 65 en reset dexpos
variabel tot 150. We controleren dan ofik
is gelijk
tot en met 24, en als dat het geval is, worden we verhoogdYPOS
bij 65 en instellenxpos
tot 330. Dit legt onze knoppen in een mooi raster.We maken vervolgens een
GameButton
en stel de tekst in op de huidige letter in de alfabetarray met behulp van(AlphabetArray [i])
Wij dan
stel de knoppen in.X
en.Y
door het gebruiken vanxpos
enYPOS
. Vervolgens duwen we de knop in degameButtonArray
voeg het toe aan het podium en voeg er een EventListener aan toe.Als laatste verhogen we de
xpos
door 60 dus de volgende keer door de lus zullen de knoppen verspringen in plaats van op elkaar.
Stap 21: checkLetter-functie
Voer de volgende code onder de
setupGameButtons ()
je hebt hierboven gemaakt.private functie checkLetter (e: MouseEvent): void var tempButton: GameButton = e.currentTarget as GameButton; var theLetter = tempButton.getText (). toLowerCase (); trace (theLetter);Hier hebben we een opgezet
tempButton
, en eende brief
variabele die de tekst van de knoppen krijgt en converteert naar lowerCase. Dan traceren wede brief
naar
het uitvoerpaneel.Voeg het volgende toe binnen de
openbare functie Hoofd ()
.public function Main () setupGameButtons ()Ga je gang en test de film en je zou de spelknoppen mooi op het podium moeten zien uitkomen, en als je erop klikt, moet de juiste letter
teruggevoerd naar het uitvoerpaneel.
Stap 22: in een woordenlijst laden
We laden in een extern txt-bestand met de woorden die in dit spel worden gebruikt, gescheiden door een nieuwlijnteken.
Ik heb een woordenlijst gedownload van SourceForge en gebruik de "variant_1-words.95". Ik gaf het een nieuwe naam
"Wordlist.txt".Voer de volgende code onder de
checkLetter
functie die u hierboven hebt gecreëerd.function doRequest (): void wordList = new Array (); var loader: URLLoader = new URLLoader (); loader.load (nieuwe URLRequest ("wordlist.txt")); loader.addEventListener (Event.COMPLETE, wordListLoaded);Hier gaan we zitten
woordenlijst
naar een nieuwe array, stel een URLLoader in, laad de "woordenlijst.txt" en stel vervolgens eenEvent.COMPLETE
luisteraar
naar de loader.
Stap 23: wordListLoaded-functie
Voeg het volgende toe onder de
doRequest
functie die je in de bovenstaande stap hebt gemaakt:function wordListLoaded (e: Event): void var tempString: String = e.target.data as String; trace (tempString);Voeg het volgende toe aan
openbare functie Hoofd ()
.public function Main () setupGameButtons (); doRequest ();Ga je gang en test de film opnieuw. Je zou de woorden uit "wordlist.txt" terug moeten zien in het outputvenster.
Stap 24: Het Guess-woord maken
We nemen het oorspronkelijke woord en vervangen alle tekens door een "?". Sommige woorden bevatten echter apostrofs ('), dus we zullen die vervangen
waar passend.Voeg het volgende toe onder de
wordListLoaded ()
functie die je in de bovenstaande stap hebt gemaakt:function createGuessWord (): void guessWord = new Array (); var randomWord = Math.floor (Math.random () * wordList.length); theWord = wordList [randomWord]; trace (theWord); theWord = theWord.substring (0, theWord.length-1); for (var i: int = 0; i< theWord.length;i++) if(theWord.charAt(i) == "'") guessWord[i] ="'"; else guessWord[i]="?"; var newGuessWord = guessWord.join(""); guess_word_text.text = newGuessWord;Omdat Strings onveranderlijk zijn in AS3, zullen we elk karakter in een array opslaan en vervolgens de array in een string converteren. Door een array te gebruiken, kunnen we eenvoudig
verander elk individueel karakter.Het eerste wat we doen is instellen
guessWord
naar een nieuwe array. We kozen vervolgens een willekeurig element uit onzewoordenlijst
array en sethet woord
gelijk aan het willekeurige element uit de woordenlijst, wat ons op zijn beurt een willekeurig woord geeft.Vervolgens gebruiken we de
substring
methode om het laatste teken van het woord af te hakken. Tijdens het testen zag ik dat de woorden aan het einde van de tekst een extra spatie hadden. Dit zorgt voor die extra ruimte.We doorlopen vervolgens
het woord
teken voor teken, controleer of het huidige teken een apostrof is ('), en als dit het geval is, stellen we de huidige index van deguessWord
array naar een apostrof ('), anders zetten we het op een "?".Eindelijk maken we een
newGuessWord
door de arrays te gebruiken die in detoetreden
methode die de elementen van een array neemt en deze omzet
in een string. Ten slotte hebben we deguess_word_text
TextField's tekst naar het nieuwe GuessWord.
Stap 25: Spel opnieuw instellen
De
resetGame ()
De functie is waar we al onze spelelementen zullen resetten voor een nieuwe game. Voor nu gebruiken we het gewoon om het guessWord te maken en onze knoppen in te stellen.Voer de volgende code onder de
createGuessWord
functie die u in de bovenstaande stap hebt gemaakt.function resetGame (): void setupGameButtons (); createGuessWord ();Wijzig de code in
openbare functie Hoofd ()
Naar het volgende.public function Main () doRequest ();Voeg vervolgens de volgende regel toe aan de
wordListLoaded
functie.function wordListLoaded (e: Event): void var tempString: String = e.target.data as String; wordList = tempString.split ("\ n"); resetGame ();Hier voegen we de woorden toe aan de
woordenlijst
array met behulp van de ingebouwde snarensplit ()
methode, doorgeven in "\ n" sinds onze woorden
worden gescheiden door newline chracters, dan noemen we deresetGame
functie die we hierboven hebben gecreëerd.Ga je gang en test de film en je zou moeten zien dat guessWord is vervangen door "?" en "" indien nodig.
Stap 26: De beul-container tekenen
Onze galgje wordt dynamisch getekend met de teken-API van AS3. Het eerste wat we moeten doen is de container voor de beul tekenen. Voer de volgende code in
onder deresetGame ()
functie:private function addHangmanContainer (): void hangmanContainer = new Sprite (); hangmanContainer.x = 180; hangmanContainer.y = 180; hangmanContainer.graphics.lineStyle (3,0x000000); hangmanContainer.graphics.drawRect (0,0,400,400); addChild (hangmanContainer);Hier hebben we de
hangmanContainer
naar een nieuwe Sprite, stel het in.X
en.Y
eigenschappen en gebruik de tekening
API om delineStyle
naar een 3px zwarte lijn. Vervolgens tekenen we een rechthoek met behulp van dedrawRect ()
methode en voeg het toe aan het podium.Voeg het volgende toe aan de
resetGame ()
functie:function resetGame (): void if (hangmanContainer! = null) removeChild (hangmanContainer); hangmanContainer = null; addHangmanContainer (); setupGameButtons (); createGuessWord ();We controleren eerst om ervoor te zorgen
hangmanContainer
is niet gelijk aan nul. Als dat niet het geval is, verwijderen we het uit het werkgebied en stellen het in op null, dan wij
gebruikaddHangmanContainer
om het toe te voegen aan het podium.Test de film en je zou de beulcontainer mooi boven de knoppen moeten zien staan.
Stap 27: drawHangman () Functie
De
drawHangman ()
functie zal worden gebruikt om de individuele beulstukken te tekenen terwijl het spel vordert. Voer de volgende code onder deaddHangmanContainer ()
functie:function drawHangman (drawNum: int): void switch (drawNum) case 0: drawGallows (); breken; geval 1: drawHead (); breken; geval 2: drawBody (); breken; geval 3: drawArm1 (); breken; geval 4: drawArm2 (); breken; geval 5: drawLeg1 (); breken; geval 6: drawLeg2 (); breken;Deze functie neemt een int als een parameter en gebruikt een switch-instructie om te beslissen welk deel van de beul moet tekenen.
Stap 28: drawGallows () Functie
De volgende code gebruikt de teken-API om de galg in de spinner van de hangmanContainer te tekenen. Voeg het volgende toe onder de
drawHangman ()
functie.functie drawGallows (): void hangmanContainer.graphics.moveTo (20,380); hangmanContainer.graphics.lineTo (360.380); hangmanContainer.graphics.moveTo (290.380); hangmanContainer.graphics.lineTo (290,50); hangmanContainer.graphics.lineTo (180,50); hangmanContainer.graphics.lineTo (180,90);Stap 29: drawHead () Functie
Deze code wordt gebruikt om de kop van de beul te tekenen. Voeg de volgende code toe onder de
drawGallows ()
functie.functie drawHead (): void hangmanContainer.graphics.drawCircle (180,120,30);Stap 30: drawBody () Functie
Deze code trekt het lichaam van de beul. Voeg de volgende code toe onder de
drawHead ()
functie:functie drawBody (): void hangmanContainer.graphics.moveTo (180,150); hangmanContainer.graphics.lineTo (180.300);Stap 31: DrawArm-functies
Deze twee functies worden gebruikt om de linker- en rechterarmen te tekenen. Voeg de volgende functies toe onder de
drawBody ()
functie:functie drawArm1 (): void hangmanContainer.graphics.moveTo (180.200); hangmanContainer.graphics.lineTo (130.190); functie drawArm2 (): void hangmanContainer.graphics.moveTo (180.200); hangmanContainer.graphics.lineTo (230,190)Stap 32: DrawLeg-functies
Deze twee functies worden gebruikt om de linker- en rechterpoten te tekenen. Voeg de volgende functies toe onder de
drawArm2 ()
functie.functie drawLeg1 (): void hangmanContainer.graphics.moveTo (180,300); hangmanContainer.graphics.lineTo (130.330); hangmanContainer.graphics.lineTo (120.320); functie drawLeg2 (): void hangmanContainer.graphics.moveTo (180,300); hangmanContainer.graphics.lineTo (230.330); hangmanContainer.graphics.lineTo (240.320);Stap 33: Creëer de You Win Movie Clip
Ga naar Invoegen> Nieuw symbool. Geef het de naam YouWin en zorg ervoor dat "Exporteren voor ActionScript" is aangevinkt en dat de klasse is ingesteld op "YouWin"
Selecteer het tekstgereedschap en zorg dat de volgende eigenschappen zijn ingesteld:
- Grootte: 14pt
- Kleur: # 00FF00
Sleep een TextField naar de MovieClip en voer de woorden "YOU WIN !!" in erin.
Stel vervolgens de volgende eigenschappen in op het TextField.
- X; -49,00
- Y: -8,00
- W: 104,00
- H: 19.00
We moeten een variabele maken om onze YouWin MovieClip op te slaan, dus vul het volgende in onderaan je variabelenverklaringen:
var youwin: YouWin;Stap 34: Creëer de filmclip You Lose
Ga naar Invoegen> Nieuw symbool. Geef het de naam YouLose en zorg ervoor dat "Exporteren voor ActionScript" is aangevinkt en dat de klasse is ingesteld op "YouLose".
Selecteer het gereedschap Tekst en zorg ervoor dat de volgende eigenschappen zijn ingesteld.
- Grootte: 14pt
- Kleur: # FF0000
Sleep een TextField naar de MovieClip en voer de woorden "YOU LOSE !!" in. erin.
Stel de volgende eigenschappen in het TextField in
- X; -49,00
- Y: -8,00
- W: 104,00
- H: 19.00
We hebben een variabele nodig om onze YouLose MovieClip te houden, dus vul het volgende in onderaan je variabele verklaring.
var youlose: YouLose;Stap 35: disableButtons () Functie
Voeg de volgende code toe onder de
drawLeg2 ()
functie.private function disableButtons (): void for (var i: int = 0; i < gameButtonArray.length;i++) gameButtonArray[i].disable();Deze code loopt gewoon door de
gameButtonArray
en schakelt alle knoppen uit.Stap 36: Finish checkLetter ()
In deze stap maken we het af
checkLetter ()
functie waar het hart van het spel ligt. Voer de volgende code in
binnen in decheckLetter ()
functie die u eerder hebt gecreëerd.private functie checkLetter (e: MouseEvent): void var tempButton: GameButton = e.currentTarget as GameButton; var theLetter = tempButton.getText (). toLowerCase (); var correctGuess: Boolean = false; var newGuessWord; tempButton.removeEventListener (MouseEvent.CLICK, checkLetter); removeChild (tempButton); for (var i: int = 0; iDe
tempButton
ende brief
variabelen werden in de vorige stappen uitgelegd. DecorrectGuess
variabele is ingesteld op
in eerste instantie onjuist, als de gebruiker een correcte letter koos, zetten we dit op true. DenewGuessWord
is een tijdelijke variabele die we zullen gebruiken om het nieuwe woord te construeren om weer te geven.Vervolgens verwijderen we de EventListener van de knop en verwijderen deze uit het werkgebied.
We lopen door
het woord
teken voor teken en controleer of het huidige teken inhet woord
is gelijk aande brief
, en
als dat zo is, plaatsen we de juiste letter in deguessWord
array naarde brief.
Vervolgens gebruiken we de join-methode van de String Class om onze
guessWord
array in een String (newGuessWord) en stel deguess_word_text
naarnewGuessWord
.We controleren of
correctGuess
is niet waar, en als dat het geval is, nemen we toenumWrong
en bel onze drawHangman-functie passerennumWrong
.We controleren dan of
newGuessWordM
is gelijk aanhet woord
en als dat het geval is, schakelen we de knoppen uit, veroorzaken we onzejij wint
MovieClip, stel zijn .x in
en.Y
, voeg het toe aan het podium en bel TweenLite om het te animeren met eenonComplete
functie.Ten slotte controleren we of
numWrong
is gelijk aan zes en als dat zo is, lopen we doorhet woord
en stel elke letter in deguessWord
matrix gelijk aan het huidige teken inhet woord
. We gebruiken dan join zoals hierboven uitgelegd en tonen het woord. We schakelen de knoppen uit, maken een instantie van onsjij verliest
Filmclip,
voeg het toe aan het podium en bel opnieuw TweenLite om te animeren met eenonComplete
functie.Stap 37: resetDe game () functie
De
resetTheGame ()
functies worden aangeroepen wanneer de animaties van dejij wint
enjij verliest
MovieClips zijn voltooid. Voer de volgende code in
onder dedrawLeg2 ()
functie:function reset De game (): void if (youwin! = null) removeChild (youwin); youwin = null; if (youlose! = null) removeChild (youlose); youlose = null; resetGame ();Deze functie controleert of de
jij wint
enjij verliest
zijn niet nul en als ze dat niet zijn, noemen we datremoveChild
verwijderen
ze van het podium en zet ze op nul. Eindelijk noemen we deresetGame
functie.Stap 38: Bezig met voltooien van resetGame ()
We moeten een laatste opruimactie uitvoeren in de
resetGame
functie. Voeg de volgende code toe aan deresetGame ()
functie:function resetGame (): void numWrong = 0; if (gameButtonArray.length> 0) for (var i: int = 0; iWe resetten eerst
numWrong
tot 0, dan doorlopen we degameButtonArray
, controleer of de knoppen op het podium staan en of ze
zijn we ze verwijderen.Stap 39: De WordList toevoegen
U moet de "wordlist.txt" opnemen in de opgenomen bestanden. Ga dus naar de "AIR for IOS" -instellingen en klik op het tabblad "Algemeen" op de knop "+"
en blader naar de "wordlist.txt" om het toe te voegen aan de opgenomen bestanden.Dit maakt onze game compleet! De volgende stap is om te publiceren voor de App Store en te uploaden via iTunes Connect.
Stap 40: Voorbereiden op de App Store
U moet eerst een genereren "Distributie" Voorzieningenprofiel. Volg de stappen in stap 4 van het eerste deel van de zelfstudie, maar
zorg ervoor dat u onder "Distributie" staat in plaats van ontwikkeling.Vervolgens moet je het downloaden "Distributie" certificaat en converteer het naar een .P12 volgens het voorbeeld uit stap 5 van het eerste deel van deze serie.
Ga dan terug naar de "Air For IOS" en onder de "DEPLOYMENT" tab, verwissel de devlopement .P12 met de distributie .P12, en verwissel het devloper provisioning-bestand
met het distributieprofiel, zorg ervoor dat u "Deployment - Apple App Store" aanvinkt en klik op Publiceren.Log ten slotte in op iTunes Connect, ga naar "Apps beheren" en voeg een nieuwe app toe, volg de instructies, upload uw app met "App Loader".
Conclusie
Deze serie gaf een goede inleiding tot mobiele ontwikkeling met Flash CS5.5. Hopelijk heb je iets nuttigs geleerd en bedankt voor het lezen! Als je meer inhoud van de iOS-ontwikkeling van Flash CS 5.5 wilt zien, kun je hieronder een reactie achterlaten!