Benvenuti alla seconda parte della nostra serie di tutorial sulla creazione di un gioco Hangman per iPad con Flash. Mentre il primo tutorial si concentrava principalmente sull'ottimizzazione del programma per la codifica di app iOS con Flash, questo tutorial si focalizzerà sull'ActiveScript e sulla logica di gioco necessaria per programmare realmente l'hangman. Iniziamo!
Nella prima parte di questa serie di tutorial, abbiamo esaminato il processo di provisioning dei dispositivi, aggiungendo un'icona di app e una schermata di caricamento e come sincronizzare l'app con l'iPad durante lo sviluppo. In questa parte del tutorial, termineremo la codifica del gameplay.
Questo tutorial incorporerà il progetto TweenLite, quindi vai avanti e prendine una copia. Dopo averlo scaricato, estrailo e aggiungi la cartella "com" alla stessa cartella in cui si trova il tuo progetto hangman. Infine, aggiungi quanto segue insieme al resto delle importazioni del tuo progetto:
import com.greensock.TweenLite;
Seleziona lo strumento di testo, assicurati che il campo di testo non sia selezionabile e che siano impostate le seguenti proprietà:
Disegna un campo di testo sullo stage e imposta le seguenti proprietà su di esso:
Dagli il nome dell'istanza "guess_word_text".
Seleziona lo strumento Ovale e assicurati che le seguenti proprietà siano impostate su di esso:
Tieni premuto "Shift" per conformare l'ovale a un cerchio e trascinare un cerchio sul palco.
Con lo "Strumento di selezione" trascinare attorno al cerchio per selezionare sia il riempimento che il tratto. Puoi dire che sono entrambi selezionati da un "Tratteggio".
Con sia il riempimento che il tratto selezionati danno al cerchio le seguenti proprietà:
Ora fai clic con il tasto destro sul cerchio e scegli "Converti in simbolo". Dagli il nome "GameButton", assicurati che "Export For Actionscript" sia selezionato e
che la classe è impostata su "GameButton".
Ora fai doppio clic su di esso per andare in modalità di modifica. Seleziona lo strumento di testo e assicurati che siano impostate le seguenti proprietà:
Trascina un campo di testo in MovieClip e imposta le seguenti proprietà su di esso:
Assicurati che TextField non sia selezionabile:
Dare a TextField il nome dell'istanza "game_btn_text".
Ora elimina il cerchio dal palco.
Vai su File> Nuovo e scegli "File Actionscript". Salva questo come "GameButton.as" nella stessa cartella del tuo "Hangman.fla".
Inserisci il codice seguente nel "GameButton.as".
package import flash.text.TextField; import flash.display.MovieClip; public class GameButton estende MovieClip public function GameButton () this.game_btn_text.selectable = false; this.mouseChildren = false; public function setText (theText: String): void this.game_btn_text.text = theText; public function getText (): String return this.game_btn_text.text; public function disable (): void this.mouseEnabled = false; traccia ( "Sì");
Qui importiamo le classi di cui abbiamo bisogno, impostiamo il game_button_text
non essere selezionabile, impostare mouseChildren
a falso così il
TextField non può ricevere eventi Mouse, aggiunto alcuni metodi getter e setter per impostare il testo sul TextField e un disattivare()
funzione
che disabiliterà i pulsanti dalla ricezione di eventi del mouse. Ottieni e imposta il testo sul game_btn_text
.
Apri "Main.as" che dovresti avere a disposizione dalla parte 1. Aggiungi le seguenti importazioni in alto, sotto la dichiarazione del pacchetto:
import flash.events.MouseEvent; import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.Event; import flash.display.Sprite;
Queste sono le classi che avremo bisogno di questo tutorial
Inserisci il codice seguente appena sotto funzione pubblica Main estende MovieClip
:
public class Main estende MovieClip // Utilizzato per i campi di testo sui nostri pulsanti di gioco 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"]; // La parola originale var theWord: String; // La parola indovina var guessWord: Array; // Un array per i nostri pulsanti di gioco var gameButtonArray: Array = new Array (); // Questo contiene tutte le parole var wordList: Array; // A Sprite disegniamo il boia in var hangmanContainer: Sprite; // Number of Wrong Guess var numWrong: int = 0;
Inserisci il seguente codice sotto il funzione pubblica Main ()
costruttore:
private function setupGameButtons (): void var xPos = 150; var yPos = 600; gameButtonArray = new Array (); per (var i: int = 0; iPer prima cosa dichiariamo due variabili
xPos
eyPos
. Questi tengono le posizioni iniziali dei nostri GameButtons. Quindi istanziamo ila una nuova matrice. Quindi passiamo attraverso il
gameButtonArrayalphabetArray
, creando un nuovo GameButton. Controlliamo seio
è uguale a
8 o 16, e se lo è aumentiamo ilyPos
variabile per 65, e resettare ilxPos
variabile a 150. Quindi controlliamo seio
è uguale
a 24, e se lo siamo aumentiamoyPos
da 65 e impostarexPos
a 330. Questo espone i nostri pulsanti in una bella griglia.Quindi creiamo a
GameButton
e imposta il suo testo alla lettera corrente nell'array alfabetico usando(AlphabetArray [i])
noi allora
imposta i pulsanti.X
e.y
usandoxPos
eyPos
. Abbiamo quindi premere il pulsante nelgameButtonArray
aggiungilo allo stage e aggiungilo ad EventListener.Infine, incrementiamo il
xPos
per 60 quindi la prossima volta attraverso il ciclo i pulsanti saranno sfalsati anziché uno sopra l'altro.
Passo 21: Funzione checkLetter
Inserisci il seguente codice sotto il
setupGameButtons ()
hai creato sopra.private function checkLetter (e: MouseEvent): void var tempButton: GameButton = e.currentTarget come GameButton; var theLetter = tempButton.getText (). toLowerCase (); trace (theLetter);Qui installiamo a
tempButton
, e ala lettera
variabile che ottiene il testo dei pulsanti e lo converte in lowerCase. Quindi tracciamola lettera
a
il pannello di output.Aggiungi il seguente all'interno del
funzione pubblica Main ()
.funzione pubblica Main () setupGameButtons ()Vai avanti e prova il film e dovresti vedere i pulsanti di gioco ben allineati sul palco, e se clicchi su di essi, la lettera corretta dovrebbe
essere tracciato al pannello di output.
Passaggio 22: caricamento in un elenco di parole
Verrà caricato in un file .txt esterno con le parole utilizzate in questo gioco, separate da un carattere di nuova riga.
Ho scaricato un elenco di parole da SourceForge e sto usando "variant_1-words.95". L'ho ribattezzato
"Wordlist.txt".Inserisci il seguente codice sotto il
checkLetter
funzione che hai creato sopra.function doRequest (): void wordList = new Array (); var loader: URLLoader = new URLLoader (); loader.load (new URLRequest ("wordlist.txt")); loader.addEventListener (Event.COMPLETE, wordListLoaded);Qui ci ambientiamo
elenco di parole
in un nuovo array, impostare un URLLoader, caricare "wordlist.txt", quindi configurare unEvent.COMPLETE
ascoltatore
al caricatore.
Passaggio 23: Funzione wordListLoaded
Aggiungi il seguente sotto il
doRequest
funzione creata nel passaggio precedente:function wordListLoaded (e: Event): void var tempString: String = e.target.data as String; trace (tempString);Aggiungi il seguente a
funzione pubblica Main ()
.funzione pubblica Main () setupGameButtons (); doRequest ();Vai avanti e prova di nuovo il film. Dovresti vedere le parole da "wordlist.txt" tracciate alla finestra di output.
Passaggio 24: creazione della parola indovina
Prenderemo la parola originale e sostituiremo tutti i caratteri con un "?". Tuttavia, alcune delle parole contengono apostrofi ('), quindi le sostituiremo
ove opportuno.Aggiungi il seguente sotto il
wordListLoaded ()
funzione creata nel passaggio precedente:function createGuessWord (): void guessWord = new Array (); var randomWord = Math.floor (Math.random () * wordList.length); theWord = wordList [randomWord]; traccia (theWord); theWord = theWord.substring (0, theWord.length-1); per (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;Poiché le stringhe sono immutabili in AS3, memorizzeremo ogni carattere in una matrice e quindi convertiremo la matrice in una stringa. Usando un array possiamo facilmente
cambia ogni singolo personaggio.La prima cosa che facciamo è impostare
guessWord
a una nuova matrice. Abbiamo quindi scelto un elemento casuale dal nostroelenco di parole
array e setla parola
uguale all'elemento casuale dalla lista di parole, che a sua volta ci dà una parola a caso.Quindi usiamo il
sottostringa
metodo per tagliare l'ultimo carattere della parola. Durante i test ho notato che le parole avevano uno spazio in più alla fine di esse. Questo si prende cura di quello spazio extra.Quindi passiamo in rassegna
la parola
carattere per carattere, controlla se il carattere corrente è un apostrofo ('), e se è impostato l'indice corrente delguessWord
array su un apostrofo ('), altrimenti lo impostiamo su "?".Finalmente, creiamo a
newGuessWord
usando gli array costruiti neladerire
metodo che prende gli elementi di un array e li trasforma
in una stringa. Alla fine, impostiamo ilguess_word_text
TextCollega il testo alla nuova GuessWord.
Passaggio 25: reimposta il gioco
Il
RESETgame ()
la funzione è dove ripristineremo tutti i nostri elementi di gioco per un nuovo gioco. Per ora lo stiamo usando solo creando guessWord e impostando i nostri pulsanti.Inserisci il seguente codice sotto il
createGuessWord
funzione creata nel passaggio precedente.function resetGame (): void setupGameButtons (); createGuessWord ();Cambia il codice all'interno
funzione pubblica Main ()
al seguente.funzione pubblica Main () doRequest ();Quindi aggiungere la seguente riga al
wordListLoaded
funzione.function wordListLoaded (e: Event): void var tempString: String = e.target.data as String; wordList = tempString.split ("\ n"); RESETgame ();Qui aggiungiamo le parole al
elenco di parole
array usando le stringhe integrateDiviso()
metodo, passando "\ n" dalle nostre parole
sono separati da caratteri di nuova linea, quindi chiamiamo ilRESETgame
funzione che abbiamo creato sopra.Vai avanti e prova il film e dovresti vedere che guessWord è stato sostituito da "?" e "" "dove appropriato.
Passo 26: Disegnare il contenitore dell'impiccato
Il nostro boia è disegnato dinamicamente usando l'API di disegno di AS3. La prima cosa che dobbiamo fare è disegnare il contenitore per il boia. Inserisci il seguente codice
sotto ilRESETgame ()
funzione:funzione privata 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);Qui impostiamo il
hangmanContainer
a un nuovo Sprite, impostalo.X
e.y
proprietà e utilizzare il disegno
API per impostare illineStyle
a una linea nera 3px. Quindi disegniamo un rettangolo usando ildrawRect ()
metodo e aggiungerlo al palco.Aggiungi il seguente al
RESETgame ()
funzione:function resetGame (): void if (hangmanContainer! = null) removeChild (hangmanContainer); hangmanContainer = null; addHangmanContainer (); setupGameButtons (); createGuessWord ();Per prima cosa, assicuriamoci
hangmanContainer
non è uguale a null. Se non lo fa, lo rimuoviamo dallo stage e lo impostiamo su null, quindi noi
usoaddHangmanContainer
per aggiungerlo al palco.Prova il film e dovresti vedere il contenitore dell'impiccato posizionato bene sopra i pulsanti.
Passaggio 27: drawHangman () Function
Il
drawHangman ()
la funzione verrà utilizzata per disegnare i singoli pezzi del boia mentre il gioco procede. Inserisci il seguente codice sotto iladdHangmanContainer ()
funzione:function drawHangman (drawNum: int): void switch (drawNum) caso 0: drawGallows (); rompere; caso 1: drawHead (); rompere; caso 2: drawBody (); rompere; caso 3: drawArm1 (); rompere; caso 4: drawArm2 (); rompere; caso 5: drawLeg1 (); rompere; caso 6: drawLeg2 (); rompere;Questa funzione prende un int come parametro e usa un'istruzione switch per decidere quale parte del boia deve disegnare.
Passaggio 28: Funzione drawGallows ()
Il seguente codice usa l'API di disegno per disegnare la forca all'interno dello sprite di hangmanContainer. Aggiungi il seguente sotto il
drawHangman ()
funzione.function 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);Passaggio 29: drawHead () Function
Questo codice è usato per disegnare la testa del boia. Aggiungi il seguente codice sotto il
drawGallows ()
funzione.function drawHead (): void hangmanContainer.graphics.drawCircle (180,120,30);Passaggio 30: DrawBody () Function
Questo codice disegna il corpo del boia. Aggiungi il seguente codice a
drawHead ()
funzione:function drawBody (): void hangmanContainer.graphics.moveTo (180,150); hangmanContainer.graphics.lineTo (180.300);Passaggio 31: funzioni DrawArm
Queste due funzioni sono utilizzate per disegnare le braccia sinistra e destra. Aggiungi le seguenti funzioni sotto il
drawBody ()
funzione:function drawArm1 (): void hangmanContainer.graphics.moveTo (180.200); hangmanContainer.graphics.lineTo (130.190); function drawArm2 (): void hangmanContainer.graphics.moveTo (180.200); hangmanContainer.graphics.lineTo (230,190)Passo 32: funzioni drawLeg
Queste due funzioni sono utilizzate per disegnare le gambe sinistra e destra. Aggiungi le seguenti funzioni sotto il
drawArm2 ()
funzione.function drawLeg1 (): void hangmanContainer.graphics.moveTo (180,300); hangmanContainer.graphics.lineTo (130.330); hangmanContainer.graphics.lineTo (120.320); function drawLeg2 (): void hangmanContainer.graphics.moveTo (180.300); hangmanContainer.graphics.lineTo (230.330); hangmanContainer.graphics.lineTo (240.320);Passaggio 33: creazione del filmato You Win
Vai a Inserisci> Nuovo simbolo. Dagli il nome YouWin e assicurati che "Export for ActionScript" sia selezionato e che la classe sia impostata su "YouWin"
Seleziona lo strumento di testo e assicurati che siano impostate le seguenti proprietà:
- Dimensioni: 14pt
- Colore: # 00FF00
Trascina un campo di testo nella MovieClip e inserisci le parole "VINCI !!" dentro.
Quindi impostare le seguenti proprietà sul TextField.
- X; -49,00
- Y: -8,00
- W: 104,00
- H: 19.00
Abbiamo bisogno di creare una variabile per mantenere il nostro YouWin MovieClip in modo da inserire quanto segue nella parte inferiore delle dichiarazioni delle variabili:
var youwin: YouWin;Passaggio 34: creazione del filmato di You Lose
Vai a Inserisci> Nuovo simbolo. Dagli il nome YouLose e assicurati che "Export for ActionScript" sia selezionato e che la classe sia impostata su "YouLose".
Seleziona lo strumento di testo e assicurati che siano impostate le seguenti proprietà.
- Dimensioni: 14pt
- Colore: # FF0000
Trascina un campo di testo nella MovieClip e inserisci le parole "TI PERDI !!" dentro.
Imposta le seguenti proprietà nel campo di testo
- X; -49,00
- Y: -8,00
- W: 104,00
- H: 19.00
Abbiamo bisogno di una variabile per contenere il YouLose MovieClip, quindi inserisci quanto segue nella parte inferiore della dichiarazione delle variabili.
var youlose: YouLose;Passaggio 35: Funzione disableButtons ()
Aggiungi il seguente codice sotto il
drawLeg2 ()
funzione.funzione privata disableButtons (): void for (var i: int = 0; i < gameButtonArray.length;i++) gameButtonArray[i].disable();Questo codice scorre semplicemente attraverso il
gameButtonArray
e disabilita tutti i pulsanti.Passaggio 36: Finishing checkLetter ()
In questo passaggio finiremo il
checkLetter ()
funzione che è dove si trova il cuore del gioco. Inserisci il seguente codice
dentro ilcheckLetter ()
funzione creata in precedenza.private function checkLetter (e: MouseEvent): void var tempButton: GameButton = e.currentTarget come GameButton; var theLetter = tempButton.getText (). toLowerCase (); var correctGuess: Boolean = false; var newGuessWord; tempButton.removeEventListener (MouseEvent.CLICK, checkLetter); removeChild (tempButton); per (var i: int = 0; iIl
tempButton
ela lettera
le variabili sono state spiegate nei passaggi precedenti. IlcorrectGuess
la variabile è impostata su
falso in un primo momento, se l'utente ha scelto una lettera corretta abbiamo impostato su true. IlnewGuessWord
è una variabile temporanea che useremo per costruire la nuova parola da visualizzare.Successivamente, rimuovere EventListener dal pulsante e rimuoverlo dallo stage.
Passiamo attraverso
la parola
carattere per carattere e verificare se il carattere corrente inla parola
è uguale ala lettera
, e
se lo è, impostiamo la lettera appropriata inguessWord
matrice ala lettera.
Quindi usiamo il metodo di join della String Class per trasformare il nostro
guessWord
array in una stringa (newGuessWord) e impostare ilguess_word_text
anewGuessWord
.Controlliamo se
correctGuess
è falso, e se lo è, incrementiamonumWrong
e chiama la nostra funzione drawHangman che passanumWrong
.Quindi controlliamo se
newGuessWordM
è uguale ala parola
e se lo è, disabilitiamo i pulsanti, istanziamo il nostrohai vinto
MovieClip, imposta il suo .x
e.y
, aggiungilo al palco e chiama TweenLite per animarlo con unonComplete
funzione.Infine, controlliamo se
numWrong
è uguale a sei e se lo è, passiamo attraversola parola
e imposta ogni lettera nelguessWord
array uguale al carattere corrente inla parola
. Quindi usiamo join come spiegato sopra e mostriamo la parola. Disabilitiamo i pulsanti, istanziamo il nostrohai perso
Un filmato,
aggiungilo al palco e ancora una volta chiama TweenLite per animare con unonComplete
funzione.Passaggio 37: resetTheGame () Function
Il
resetTheGame ()
le funzioni sono chiamate quando le animazioni delhai vinto
ehai perso
I MovieClip sono finiti. Inserisci il seguente codice
sotto ildrawLeg2 ()
funzione:function resetTheGame (): void if (youwin! = null) removeChild (youwin); youwin = null; if (youlose! = null) removeChild (youlose); youlose = null; resetGame ();Questa funzione controlla se il
hai vinto
ehai perso
non sono nulli, e se non lo sono chiamiamoremoveChild
rimuovere
li dal palcoscenico e li metti a zero. Alla fine chiamiamo ilRESETgame
funzione.Passaggio 38: Finitura resetGame ()
Dobbiamo fare un po 'di pulizia finale nel
RESETgame
funzione. Aggiungi il seguente codice alRESETgame ()
funzione:function resetGame (): void numWrong = 0; if (gameButtonArray.length> 0) for (var i: int = 0; iPer prima cosa resettiamo
numWrong
a 0, quindi passiamo attraverso ilgameButtonArray
, controlla se i pulsanti sono sul palco, e se loro
li rimuoviamo.Passaggio 39: aggiunta di WordList
Dovrai includere "wordlist.txt" nei file inclusi. Quindi vai alle impostazioni "AIR for IOS" e nella scheda "Generale" fai clic sul pulsante "+"
e vai al "wordlist.txt" aggiungendolo ai file inclusi.Questo completa il nostro gioco! Il prossimo passo è pubblicare per l'App Store e caricare tramite iTunes Connect.
Passaggio 40: Preparazione per l'App Store
Prima dovrai generare un "Distribuzione" Profilo di provisioning. Seguire i passaggi del punto 4 della prima parte del tutorial, ma
assicurati di essere in "Distribuzione" invece di sviluppo.Successivamente sarà necessario scaricare il "Distribuzione" certificato e convertirlo in un .P12 seguendo l'esempio del passaggio 5 della prima parte di questa serie.
Quindi, torna a "Air For IOS" e nella scheda "DEPLOYMENT", scambia lo sviluppo .P12 con la distribuzione .P12 e sostituisci il file di provisioning di devloper
con il profilo di distribuzione, assicurati di spuntare "Distribuzione - App Store di Apple" e fai clic su Pubblica.Infine, accedi a iTunes Connect, vai su "Gestisci applicazioni" e aggiungi una nuova app, segui le istruzioni, carica la tua app con "Caricatore app".
Conclusione
Questa serie ha dato una buona introduzione allo sviluppo mobile con Flash CS5.5. Spero tu abbia imparato qualcosa di utile e ti ringrazio per aver letto! Se vuoi vedere più contenuti di sviluppo per iOS di Flash CS 5.5, lascia un commento qui sotto!