In deze korte serie laat ik je zien hoe je een vliegtuiggevechtgame maakt die doet denken aan het oude arcadespel uit 1942. Onderweg leer je over Corona's storyboard-functionaliteit, timers, een personage verplaatsen en een beetje trigonometrie.
De afbeeldingen in deze tutorial zijn gemaakt door Ari Feldman en verstrekt onder de Common Public License, wat betekent dat ze gratis te gebruiken zijn. Zorg ervoor dat je de SpriteLib van Ari Feldman bekijkt. Laten we beginnen.
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 het volgende codefragment.
instellingen = orientation = default = "portrait", supported = "portrait",,
In build.settings, we stellen de standaardoriëntatie 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 Corona-documentatie te verkennen.
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 code 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 frames per seconde in 30
.
U kunt leren welke andere eigenschappen u kunt instellen config.lua door de Corona-documentatie te bekijken.
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 en de storyboard module om het eerste scherm te laden.
Als je niet bekend bent met Corona's Storyboard-module, raad ik aan de documentatie snel te lezen. Kortom, Storyboard is de ingebouwde oplossing voor het maken en beheren van scènes ("schermen") in Corona. Deze bibliotheek biedt ontwikkelaars een eenvoudige manier om afzonderlijke scènes te maken en over te zetten.
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 (registratiepunten) in te stellen, voegt u het volgende toe aan main.lua.
display.setDefault ("anchorX", 0) display.setDefault ("anchorY", 0)
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 het centrum van het weergaveobject is, stelt u beide eigenschappen in 0.5
.
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 anders zal zijn elke keer dat de applicatie wordt uitgevoerd. Voeg het volgende codefragment toe aan main.lua.
math.randomseed (os.time ())
Voordat we de Storyboard-module kunnen gebruiken, moeten we deze eerst nodig hebben. Voeg het volgende toe aan main.lua.
lokaal storyboard = vereisen "storyboard"
Voer het volgende codefragment in onder de regel waarin u de Storyboard-module nodig had.
storyboard.gotoScene ("start")
Hierdoor gaat de toepassing naar het gewenste scherm begin, wat ook een Lua-bestand is, start.lua. U hoeft de bestandsextensie niet toe te voegen wanneer u de gotoScene
functie.
Maak een nieuw Lua-bestand met de naam start.lua in de hoofddirectory van het project. Dit zal een storyboard-bestand zijn, wat betekent dat we de Storyboard-module nodig hebben en een storyboardscene creëren. Voeg het volgende fragment toe aan start.lua.
lokaal storyboard = vereisen ("storyboard") lokale scène = storyboard.newScene ()De oproep aan
newScene
merken start.lua onderdeel van het storyboard van de applicatie. Dit betekent dat het een scherm in het spel wordt, dat we storyboard-methoden kunnen noemen.We hebben slechts één lokale variabele nodig, startknop
, in het grootste deel van start.lua. Deze lokale variabele wordt gebruikt om te verwijzen naar de startknop in deze scène.
lokale startknop
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 het storyboard, bijvoorbeeld door het aanroepen 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 u terugkeert naar een bepaalde scène. De eenvoudigste manier om dit te doen is om de scène uit het storyboard 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.
Als je de tijd hebt genomen om de documentatie over storyboards te lezen die ik eerder heb gekoppeld, zul je gemerkt hebben dat de documentatie een sjabloon bevat met elk mogelijk storyboard-evenement. De opmerkingen zijn erg handig omdat ze aangeven welke gebeurtenissen moeten worden gebruikt voor het initialiseren van activa, timers, enzovoort.
De sjabloon lijkt in eerste instantie een beetje overweldigend. In deze zelfstudie zijn we echter alleen geïnteresseerd in drie evenementen, createScene
, enterScene
, en exitScene
.
Voeg het volgende toe als fragment aan start.lua.
function scene: createScene (event) local group = self.view local background = display.newRect (0, 0, display.contentWidth, display.contentHeight) background: setFillColor (0, .39, .75) group: insert (background) local bigplane = display.newImage ("bigplane.png", 0,0) groep: insert (bigplane) startbutton = display.newImage ("startbutton.png", 264.670) groep: invoegen (startknop) einde
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.
Vervolgens tekenen we een rechthoek voor de achtergrond. Corona's tonen
object wordt geleverd met enkele tekenmethoden, zoals newCircle
, nieuwe lijn
, en, zoals getoond in het bovenstaande fragment, newRect
. We roepen ook aan SetFillColor
om de rechthoek een blauwachtige kleur te geven. De parameters die we doorgeven zijn percentages.
Vervolgens voegen we de achtergrond
in de groep. Het is belangrijk om weergaveobjecten in de groep van de weergave in te voegen om ervoor te zorgen dat ze worden verwijderd wanneer de hoofdweergave wordt verwijderd. Maak tenslotte de startknop en voeg deze ook toe aan de groep. De tonen
object heeft de nieuw beeld
methode, die als parameters het pad naar de afbeelding en de X
en Y
waarden voor de positie van de afbeelding op het scherm.
De enterScene
methode wordt aangeroepen onmiddellijk nadat de scène op het scherm is verplaatst. Hier kunt u gebeurtenislisteners toevoegen, timers starten, audio laden, enz. Voeg het volgende fragment toe onder de code die u in de vorige stap hebt toegevoegd.
functiescène: enterScene (gebeurtenis) startknop: addEventListener ("tik", startGame) einde
In enterScene
, we voegen een gebeurtenislistener toe aan de startknop
, welke de start het spel
functie wanneer de gebruiker op de startknop tikt.
De exitScene
methode wordt aangeroepen wanneer de scène op het punt staat buiten het scherm te bewegen. Dit is waar je naartoe wilt ongedaan maken wat je ook hebt ingesteld in de enterScene
methode, zoals het verwijderen van gebeurtenislisteners, het stoppen van timers, het verwijderen van audio, enz. Voeg het volgende fragment toe onder de code die u in de vorige stap hebt toegevoegd.
functiescène: exitScene (gebeurtenis) startknop: removeEventListener ("tik", startGame) einde
Alles wat we doen in de exitScene
methode is het verwijderen van de gebeurtenislistener die we hebben toegevoegd aan de startknop
.
De start het spel
functie is eenvoudig. Het heeft het storyboard het laden gamelevel tafereel.
function startGame () storyboard.gotoScene ("gamelevel") einde
De createScene
, enterScene
, en exitScene
methoden, we moeten de scène registreren om naar deze gebeurtenissen te luisteren. Voer het volgende codefragment in om dit te doen.
scène: addEventListener (scène "createScene", scène): addEventListener (scène "enterScene", scène): addEventListener ("exitScene", scène)
Het laatste wat je moet doen in een storyboard is het terugkeren van de scène, omdat het een module is.
terugkeer scène
Voordat we onze voortgang kunnen testen, moeten we de gamelevel tafereel. Maak een nieuw Lua-bestand in de hoofddirectory van het project en noem het gamelevel.lua. Voeg het volgende codefragment toe aan het bestand dat u zojuist hebt gemaakt.
lokaal storyboard = vereisen ("storyboard") lokale scène = storyboard.newScene () teruggaande scène
Zoals we eerder zagen, hebben we eerst de storyboard-module nodig, maken we een nieuwe scène en geven we de scène terug. De gamelevel scene is de scène waarin we de gameplay van het spel zullen implementeren.
Dit brengt het eerste deel van deze serie tot een einde. In het volgende deel van deze serie zullen we de gameplay van de game gaan implementeren. Bedankt voor het lezen en ik zie je daar.