In questa serie in tre parti, ti mostrerò come creare un gioco ispirato al popolare gioco degli anni Settanta, Space Invaders. Lungo la strada, scoprirai le funzionalità di gestione delle scene di Corona, i timer, lo spostamento di un personaggio, il motore fisico incorporato e come utilizzare i moduli per emulare le classi nel linguaggio di programmazione Lua.
Aprire il simulatore Corona, fare clic Nuovo progetto, e configurare il progetto come mostrato di seguito.
Seleziona una posizione per salvare il tuo progetto e clicca ok. Questo creerà una cartella con un numero di icone e tre file che sono importanti per noi, main.lua, config.lua, e build.settings.
Daremo un'occhiata a ciascun file nei prossimi passaggi.
Il build.settings il file è responsabile delle proprietà del tempo di costruzione del progetto.
Aprire questo file, rimuovere il suo contenuto e popolarlo con la seguente configurazione.
settings = orientation = default = "portrait", supportato = "portrait",,
Nel build.settings, stiamo impostando l'orientamento predefinito e limitando l'applicazione
per supportare solo un orientamento verticale. Puoi scoprire quali altre impostazioni puoi includere
build.settings esplorando la documentazione Corona.
Il config.lua il file gestisce la configurazione dell'applicazione. Come abbiamo fatto con build.settings,
apri questo file, rimuovi il suo contenuto e aggiungi la seguente configurazione.
application = content = width = 768, height = 1024, scale = "letterbox", fps = 30,
Questo imposta la larghezza e l'altezza predefinite dello schermo, utilizza letterbox per ridimensionare le immagini,
e imposta il frame rate su 30. Visita la documentazione di Corona per saperne di più sulle altre proprietà che puoi impostare config.lua.
Il main.lua file è il file che l'applicazione carica per primo e utilizza per avviare l'applicazione. Useremo main.lua per impostare alcune impostazioni predefinite per l'applicazione e utilizzare il Compositore libreria per caricare la prima schermata.
Se non conosci la libreria di Corona's Composer, allora ti consiglio di dare il
documentazione una lettura veloce. In breve, Composer è la soluzione integrata per la creazione e la gestione di scene (schermo) in Corona. La libreria offre agli sviluppatori un modo semplice per creare e passare da una scena all'altra.
Il nuovo modulo Composer sostituisce il precedente e ora deprecato StoryBoard modulo. È disponibile una guida alla migrazione per convertire i vecchi progetti in Composer.
Non vogliamo che la barra di stato mostri nella nostra applicazione. Aggiungi il seguente snippet di codice a main.lua per nascondere la barra di stato.
display.setStatusBar (display.HiddenStatusBar)
Per impostare l'ancoraggio o i punti di registrazione predefiniti, aggiungere il seguente blocco di codice a main.lua.
display.setDefault ("anchorX", 0.5) display.setDefault ("anchorY", 0.5)
Il anchorX
e anchorY
le proprietà specificano dove si desidera che sia il punto di registrazione degli oggetti di visualizzazione. Si noti che il valore varia da 0.0 a 1.0. Ad esempio, se desideri che il punto di registrazione sia in alto a sinistra dell'oggetto di visualizzazione, devi impostare entrambe le proprietà su 0.0.
Il nostro gioco userà Lua's Math.random
funzione per generare numeri casuali. Per assicurarsi che i numeri siano veramente casuali ogni volta che si esegue l'applicazione, è necessario fornire un valore di inizializzazione. Se non si fornisce un valore di inizializzazione, l'applicazione genererà la stessa casualità ogni volta.
Un buon valore di seme è Lua's os.time
funzione poiché sarà diversa ogni volta che
l'applicazione viene eseguita. Aggiungi il seguente snippet di codice a main.lua.
math.randomseed (os.time ())
Quando si utilizza Corona e in particolare il linguaggio di programmazione Lua, è possibile utilizzare un modo per accedere alle variabili in tutta l'applicazione globale variabili. Il modo in cui dichiari una variabile globale è la disattivazione della parola chiave Locale
di fronte alla dichiarazione variabile.
Ad esempio, il seguente blocco di codice dichiara due variabili. La prima è una variabile locale che sarebbe disponibile solo nel blocco di codice in cui è definita. La seconda è una variabile globale disponibile ovunque nell'applicazione.
local iamalocalvariable = "local" iamaglobalvariable = "global"
Generalmente si considera una cattiva pratica l'uso di variabili globali. Il motivo principale è evitare conflitti di denominazione, ovvero avere due variabili con lo stesso nome. Possiamo risolvere questo problema usando moduli. Crea un nuovo file Lua, chiamalo gamedata.lua, e aggiungere il seguente codice ad esso.
M = restituisce M
Creiamo semplicemente un tavolo e lo restituiamo. Per utilizzare questo, usiamo Lua's richiedere
metodo. Aggiungi il seguente a main.lua.
local gameData = require ("gamedata")
Possiamo quindi aggiungere le chiavi a gamedata
, quale sarà il faux globale variabili. Dai un'occhiata al seguente esempio.
gameData.invaderNum = 1 - Utilizzato per tenere traccia del livello che siamo su gameData.maxLevels = 3 - Numero massimo di livelli il gioco avrà gameData.rowsOfInvaders = 4 - Quante file di Invaders creare
Ogni volta che vogliamo accedere a queste variabili, tutto ciò che dobbiamo fare è usare il richiedere
funzione da caricare gamedata.lua. Ogni volta che carichi un modulo usando Lua richiedere
funzione, aggiunge il moduloa a package.loaded
tavolo. Se si carica un modulo, il package.loaded
la tabella viene controllata prima per vedere se il modulo è già stato caricato. Se lo è, quindi utilizza il modulo memorizzato nella cache anziché caricarlo nuovamente.
Prima di poter usare il modulo Composer, dobbiamo prima averlo richiesto. Aggiungi il seguente a main.lua.
compositore locale = require ("compositore")
Aggiungi il seguente snippet di codice a main.lua. Questo renderà l'applicazione andare alla scena chiamata inizio, che è anche un file Lua, start.lua. Non è necessario aggiungere l'estensione del file quando si chiama il gotoScene
funzione.
compositore.gotoScene ("start")
Crea un nuovo file Lua chiamato start.lua nella directory principale del progetto. Questo sarà un file di composizione, il che significa che è necessario richiedere il modulo Composer e creare una scena di compositore. Aggiungi il seguente snippet a start.lua.
compositore locale = require ("compositore") scena locale = composer.newScene () restituisce la scena
La chiamata a newScene
fa start.lua parte della gerarchia delle scene del compositore. Ciò significa che diventa uno schermo all'interno del gioco, sul quale possiamo chiamare i metodi di composizione.
Da qui in poi, il codice aggiunto a start.lua dovrebbe essere posizionato sopra il ritorno
dichiarazione.
Le seguenti sono le variabili locali di cui avremo bisogno per inizio scena.
startButton locale - usato per avviare il gioco pulsatingText = require ("pulsatingtext") - Un modulo che fornisce un effetto di testo pulsante starFieldGenerator = require ("starfieldgenerator") - Un modulo che genera starFieldGenerator starGenerator locale - Un'istanza di StarFieldGenerator
È importante capire che le variabili locali nel blocco principale vengono richiamate solo una volta,
quando la scena viene caricata per la prima volta. Durante la navigazione attraverso le scene del compositore, ad esempio, richiamando metodi come gotoScence
, le variabili locali saranno già inizializzate.
Questo è importante da ricordare se si desidera reinizializzare le variabili locali quando
tornando indietro a una scena particolare. Il modo più semplice per farlo è rimuovere la scena dalla gerarchia del compositore chiamando il removeScence
metodo. La prossima volta che navigherai su quella scena, verrà automaticamente ricaricata. Questo è l'approccio che seguiremo in questo tutorial.
IlpulsatingText
e starFieldGenerator
sono due moduli personalizzati che creeremo per aggiungere funzionalità di classe al progetto. Creare due nuovi file nella cartella del progetto denominata pulsatingtext.lua e starfieldgenerator.lua.
Se hai avuto il tempo di leggere la documentazione su Composer, a cui mi sono collegato in precedenza,
avrai notato che la documentazione include un modello che contiene ogni possibile
evento del compositore. I commenti sono molto utili in quanto indicano quali eventi sfruttare per inizializzare risorse, timer, ecc. Siamo interessati a scena: creare
, scena: spettacolo
, e scena: nascondere
metodi per questo tutorial.
scena: creare
Aggiungi il seguente snippet di codice a start.lua.
function scene: create (event) local group = self.view startButton = display.newImage ("new_game_btn.png", display.contentCenterX, display.contentCenterY + 100) gruppo: insert (startButton) fine
Questo metodo viene chiamato quando la vista della scena non esiste ancora. Qui è dove devi inizializzare gli oggetti di visualizzazione e aggiungerli alla scena. Il gruppo
la variabile sta puntando a self.view
, il quale è un GroupObject
per l'intera scena.
Creiamo il pulsante Start
usando il Display
oggetto di nuova immagine
metodo, che prende come parametri il percorso dell'immagine e il X
e y
valori per la posizione dell'immagine sullo schermo.
scena: spettacolo
Compositore di scena: spettacolo
il metodo ha due fasi. Il volontà fase viene chiamata quando la scena è ancora fuori dallo schermo, ma sta per apparire sullo schermo. Il fatto fase viene chiamata quando la scena è sullo schermo. Qui è dove vuoi aggiungere il codice per rendere la scena viva, avviare timer, aggiungere ascoltatori di eventi, riprodurre audio, ecc.
In questo tutorial ci interessa solo il fatto fase. Aggiungi il seguente snippet di codice a start.lua.
function scene: show (evento) local phase = event.phase local previousScene = composer.getSceneName ("previous") if (previousScene ~ = nil) then composer.removeScene (previousScene) end if (phase == "did") then startButton : addEventListener ("tap", startGame) end end
Dichiariamo una variabile locale fase
, che usiamo per verificare quale fase mostrare
il metodo è in. Poiché torneremo su questa scena più avanti nel gioco, controlleremo se c'è una scena precedente e, in tal caso, rimuoverla. Aggiungiamo a rubinetto ascoltatore al pulsante Start
che chiama il inizia il gioco
funzione.
scena: nascondere
Compositore di scena: nascondere
il metodo ha anche due fasi. Il volontà fase viene chiamata quando la scena è sullo schermo, ma sta per andare fuori campo. Qui si desidera interrompere qualsiasi timer, rimuovere i listener di eventi, interrompere l'audio, ecc fatto fase viene chiamata una volta che la scena è andata fuori campo.
In questo tutorial, ci interessa solo il volontà fase in cui rimuoviamo il rubinetto ascoltatore dal pulsante Start
.
function scene: hide (event) local phase = event.phase if (phase == "will") then startButton: removeEventListener ("tap", startGame) end end
Il inizia il gioco
la funzione viene chiamata quando l'utente tocca il pulsante Start
. In questa funzione, invochiamo il gotoScene
metodo del compositore, che ci porterà al gamelevel scena.
function startGame () compositer.gotoScene ("gamelevel") fine
Crea un nuovo file chiamato gamelevel.lua e aggiungere il seguente codice ad esso. Questo dovrebbe sembrare familiare. Stiamo creando una nuova scena e restituendola.
compositore locale = require ("compositore") scena locale = composer.newScene () restituisce la scena
Abbiamo bisogno di aggiungere ascoltatori di scena per il creare
, mostrare
, e nascondere
metodi. Aggiungere il seguente codice a start.lua.
scena: addEventListener (scena "create", scene): addEventListener (scena "show", scene): addEventListener ("nascondi", scena)
Se stai testando il gioco ora, dovresti vedere uno schermo nero con un pulsante che puoi toccare. Toccando il pulsante dovrebbe portarti al gamelevel scena, che ora è solo una schermata vuota.
Questo porta a termine questa parte della serie. Nella parte successiva, inizieremo ad implementare il gameplay del gioco. Grazie per aver letto e ci vediamo nella seconda parte di questa serie.