Crea un gioco di Space Invaders in Corona Impostazione del progetto

Cosa starai creando

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.

1. Nuovo progetto

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.

2. Impostazioni di compilazione

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.

3. Configurazione dell'applicazione

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.

4. Punto di ingresso

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.

5. Nascondi barra di stato

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)

6. Imposta punti di ancoraggio predefiniti

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.

7. Generatore casuale di semi

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 ())

8. Evitare i Globali

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.

9. Richiedi compositore

Prima di poter usare il modulo Composer, dobbiamo prima averlo richiesto. Aggiungi il seguente a main.lua.

compositore locale = require ("compositore")

10. Carica la scena iniziale

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")

11. Inizia scena

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.

11. Variabili locali

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.

12. Eventi Storyboard

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.

Passo 1: 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.

Passo 2: 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.

Passaggio 3: 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

16. Inizia partita

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

17. Scena a livello di gioco

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

18. Aggiungi Scene Listers

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) 

19. Progresso del test

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.

Conclusione

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.