In deze driedelige serie laat ik je zien hoe je een game maakt die is geïnspireerd op de populaire seventies-game Space Invaders. Onderweg komt u meer te weten over Corona's functionaliteit voor scènebeheer, timers, het verplaatsen van een personage, de ingebouwde physics-engine en het gebruik van modules om klassen in de Lua-programmeertaal te emuleren..
Open de Corona Simulator en klik Nieuw project, en configureer het project zoals hieronder getoond.
Selecteer een locatie om uw project op te slaan en klik op OK. Hiermee wordt een map gemaakt met een aantal pictogrammen en drie bestanden die voor ons belangrijk zijn, main.lua, config.lua, en build.settings.
We zullen elk bestand in de volgende paar stappen bekijken.
De build.settings bestand is verantwoordelijk voor de build time-eigenschappen van het project.
Open dit bestand, verwijder de inhoud en vul het met de volgende configuratie.
instellingen = orientation = default = "portrait", supported = "portrait",,
In build.settings, we stellen de standaardrichting in en beperken de applicatie
om alleen een staande oriëntatie te ondersteunen. U kunt leren welke andere instellingen u kunt opnemen in
build.settings door de documentatie van Corona te bekijken.
De config.lua bestand behandelt de configuratie van de toepassing. Zoals we deden met build.settings,
open dit bestand, verwijder de inhoud en voeg de volgende configuratie toe.
toepassing = content = width = 768, height = 1024, scale = "letterbox", fps = 30,
Hiermee stelt u de standaardbreedte en hoogte van het scherm in brievenbus om de afbeeldingen te schalen,
en stelt de framesnelheid in op 30. Ga naar de Corona-documentatie voor meer informatie over de andere eigenschappen die u kunt instellen config.lua.
De main.lua bestand is het bestand dat de toepassing als eerste laadt en gebruikt om de toepassing te booten. We zullen gebruiken main.lua om een paar standaardinstellingen voor de toepassing in te stellen en de Componist bibliotheek om het eerste scherm te laden.
Als u niet bekend bent met Corona's Composer-bibliotheek, raad ik u aan de
documentatie een snel lezen. Kortom, Composer is de ingebouwde oplossing voor het maken en beheren van scènes (schermen) in Corona. De bibliotheek biedt ontwikkelaars een eenvoudige manier om afzonderlijke scènes te maken en over te zetten.
De nieuwere Composer-module vervangt de oudere en nu verouderd StoryBoard module. Er is een migratiegids beschikbaar waarmee u uw oude projecten kunt omzetten om Composer te gebruiken.
We willen niet dat de statusbalk in onze applicatie wordt weergegeven. Voeg het volgende codefragment toe aan main.lua om de statusbalk te verbergen.
display.setStatusBar (display.HiddenStatusBar)
Om het standaard anker of registratiepunten in te stellen, voegt u het volgende codeblok toe aan main.lua.
display.setDefault ("anchorX", 0.5) display.setDefault ("anchorY", 0.5)
De anchorX
en anchorY
eigenschappen geven aan waar u het registratiepunt van uw weergaveobjecten wilt hebben. Merk op dat de waarde varieert van 0.0 naar 1.0. Als u bijvoorbeeld wilt dat het registratiepunt links bovenaan het weergaveobject staat, stelt u beide eigenschappen in 0.0.
In onze game worden Lua's gebruikt Math.random
functie om willekeurige getallen te genereren. Om ervoor te zorgen dat de getallen echt willekeurig zijn telkens wanneer de toepassing wordt uitgevoerd, moet u een seed-waarde opgeven. Als u geen seed-waarde opgeeft, genereert de toepassing steeds dezelfde willekeurigheid.
Een goede zaadwaarde is Lua's os.time
functie omdat het elke keer anders zal zijn
toepassing wordt uitgevoerd. Voeg het volgende codefragment toe aan main.lua.
math.randomseed (os.time ())
Bij het gebruik van Corona, en met name de Lua-programmeertaal, is het een manier om toegang tot variabelen in de hele applicatie te hebben globaal variabelen. De manier waarop u een globale variabele declareert, is door het sleutelwoord weg te laten lokaal
voor de variabele verklaring.
In het volgende codeblok worden bijvoorbeeld twee variabelen verklaard. De eerste is een lokale variabele die alleen beschikbaar zou zijn in het codeblok waarin deze is gedefinieerd. De tweede variabele is een globale variabele die overal in de applicatie beschikbaar is.
local iamalocalvariable = "local" iamaglobalvariable = "global"
Het wordt over het algemeen als een slechte gewoonte beschouwd om globale variabelen te gebruiken. De meest voorkomende reden is om naamgevingsconflicten te voorkomen, dat wil zeggen twee variabelen hebben met dezelfde naam. We kunnen dit probleem oplossen door te gebruiken modules. Maak een nieuw Lua-bestand, noem het gamedata.lua, en voeg de volgende code eraan toe.
M = retourneer M
We maken eenvoudigweg een tabel en geven deze terug. Om dit te gebruiken, gebruiken we Lua's vereisen
methode. Voeg het volgende toe aan main.lua.
local gameData = require ("gamedata")
We kunnen dan toetsen toevoegen spel gegevens
, wat de faux zal zijn globaal variabelen. Bekijk het volgende voorbeeld.
gameData.invaderNum = 1 - Gebruikt om het niveau te volgen dat we op gameData.maxLevels = 3 - Maximumaantal niveaus hebben dat het spel gameData.rowsOfInvaders = 4 heeft - Hoeveel rijen Invaders te maken
Wanneer we toegang willen tot deze variabelen, hoeven we alleen de. Te gebruiken vereisen
functie om te laden gamedata.lua. Elke keer dat u een module met Lua's laadt vereisen
functie, voegt het de module toenaar een package.loaded
tafel. Als u een module laadt, is de package.loaded
tabel wordt eerst gecontroleerd om te zien of de module al is geladen. Als dat zo is, gebruikt het de cachemodule in plaats van het opnieuw te laden.
Voordat we de Composer-module kunnen gebruiken, moeten we deze eerst nodig hebben. Voeg het volgende toe aan main.lua.
lokale componist = vereisen ("componist")
Voeg het volgende codefragment toe aan main.lua. Hierdoor gaat de toepassing naar de genoemde scène begin, wat ook een Lua-bestand is, start.lua. U hoeft de bestandsextensie niet toe te voegen wanneer u de gotoScene
functie.
composer.gotoScene ("start")
Maak een nieuw Lua-bestand met de naam start.lua in de hoofddirectory van het project. Dit zal een componist-bestand zijn, wat betekent dat we de Composer-module nodig hebben en een compositiescène creëren. Voeg het volgende fragment toe aan start.lua.
local composer = require ("composer") local scene = composer.newScene () teruggaande scène
De oproep aan newScene
merken start.lua onderdeel van de scènehiërarchie van de componist. Dit betekent dat het een scherm in het spel wordt, waarop we componermethoden kunnen noemen.
Vanaf hier is de code toegevoegd aan start.lua moet boven de. worden geplaatst terugkeer
uitspraak.
Het volgende zijn de lokale variabelen die we nodig zullen hebben voor de begin tafereel.
local startButton - gebruikt om het spel te starten local pulsatingText = require ("pulsatingtext") - Een module met een pulserend teksteffect lokale starFieldGenerator = require ("starfieldgenerator") - Een module die de starFieldGenerator lokale starGenerator genereert - Een exemplaar van de starFieldGenerator
Het is belangrijk om te begrijpen dat lokale variabelen in het hoofdgedeelte slechts eenmaal worden aangeroepen,
wanneer de scène voor de eerste keer wordt geladen. Bij het navigeren door de scènes van de componist, bijvoorbeeld door het oproepen van methoden zoals gotoScence
, de lokale variabelen worden al geïnitialiseerd.
Dit is belangrijk om te onthouden als u wilt dat de lokale variabelen opnieuw geïnitialiseerd worden wanneer
teruggaan naar een bepaalde scène. De eenvoudigste manier om dit te doen is om de scène uit de componistenhiërarchie te verwijderen door de removeScence
methode. De volgende keer dat u naar die scène navigeert, wordt deze automatisch opnieuw geladen. Dat is de aanpak die we zullen volgen in deze tutorial.
DepulsatingText
en starFieldGenerator
zijn twee aangepaste modules die we zullen maken om klasse-achtige functionaliteit aan het project toe te voegen. Maak twee nieuwe bestanden in uw projectmap met de naam pulsatingtext.lua en starfieldgenerator.lua.
Als je de tijd hebt genomen om de documentatie over Composer te lezen, waar ik eerder naar heb gelinkt,
je zult gemerkt hebben dat de documentatie een sjabloon bevat met alle mogelijke
componist evenement. De opmerkingen zijn erg handig omdat ze aangeven welke gebeurtenissen moeten worden gebruikt voor het initialiseren van activa, timers, enz. Wij zijn geïnteresseerd in de scène: maak
, scène: toon
, en scène: verberg
methoden voor deze tutorial.
scène: maak
Voeg het volgende codefragment toe aan start.lua.
function scene: create (event) local group = self.view startButton = display.newImage ("new_game_btn.png", display.contentCenterX, display.contentCenterY + 100) group: insert (startButton) end
Deze methode wordt genoemd als de scène nog niet bestaat. Hier moet u de weergaveobjecten initialiseren en deze aan de scène toevoegen. De groep
variabele wijst naar self.view
, wat een is GroupObject
voor de hele scène.
We maken de startknop
door de tonen
voorwerpen nieuw beeld
methode, die als parameters het pad naar de afbeelding en de X
en Y
waarden voor de positie van het beeld op het scherm.
scène: toon
Composer's scène: toon
methode heeft twee fasen. De zullen fase wordt opgeroepen als de scène nog steeds buiten beeld is, maar op het punt staat op het scherm te verschijnen. De deed fase wordt aangeroepen wanneer de scène op het scherm wordt weergegeven. Hier wil je code toevoegen om de scène tot leven te brengen, timers starten, gebeurtenislisteners toevoegen, audio afspelen, enz.
In deze tutorial zijn we alleen geïnteresseerd in de deed fase. Voeg het volgende codefragment toe aan start.lua.
functiescène: show (evenement) lokale fase = event.phase local previousScene = composer.getSceneName ("previous") if (vorigeScene ~ = nil) then composer.removeScene (vorigeScene) einde if (phase == "did") then startButton : addEventListener ("tik", startGame) einde
We verklaren een lokale variabele fase
, die we gebruiken om te controleren in welke fase het laten zien
methode is in. Omdat we later in het spel terug zullen komen naar deze scène, controleren we of er een vorige scène is en als deze het geval is, verwijder deze dan. We voegen een toe tik luisteraar voor de startknop
dat roept de start het spel
functie.
scène: verberg
Composer's scène: verberg
methode heeft ook twee fasen. De zullen fase wordt opgeroepen wanneer de scène op het scherm verschijnt, maar op het punt staat om van het scherm af te gaan. Hier wil je alle timers stoppen, eventlisteners verwijderen, audio stoppen, enz deed fase wordt genoemd als de scène van het scherm is verdwenen.
In deze tutorial zijn we alleen geïnteresseerd in de zullen fase waarin we de tik luisteraar van de startknop
.
function scene: hide (event) local phase = event.phase if (phase == "will") then startButton: removeEventListener ("tap", startGame) end end
De start het spel
functie wordt aangeroepen wanneer de gebruiker op de startknop
. In deze functie roepen we de gotoScene
componist methode, die ons naar de gamelevel tafereel.
function startGame () composer.gotoScene ("gamelevel") einde
Maak een nieuw bestand met de naam gamelevel.lua en voeg de volgende code eraan toe. Dit moet bekend voorkomen. We creëren een nieuwe scène en geven deze terug.
local composer = require ("composer") local scene = composer.newScene () teruggaande scène
We moeten scene listeners toevoegen voor de creëren
, laten zien
, en verbergen
methoden. Voeg de volgende code toe aan start.lua.
scène: addEventListener (scène "create", scène): addEventListener (scène "show", scène): addEventListener ("hide", scène)
Als je het spel nu test, zou je een zwart scherm moeten zien met een knop waarop je kunt tikken. Tik op de knop om naar de gamelevel scène, die nu slechts een leeg scherm is.
Dit brengt dit deel van de serie tot een einde. In het volgende deel zullen we de gameplay van de game gaan implementeren. Bedankt voor het lezen en tot ziens in het tweede deel van deze serie.