In deze tweedelige lessenreeks leer je hoe je een flipperkastgame maakt. Het doel van het spel is om de bal met de paddles te raken om de score te verhogen. Lees verder!
Met behulp van vooraf gemaakte afbeeldingen coderen we een leuk spel met Lua en de Corona SDK API's.
De speler kan een bal slaan met behulp van de knoppen op het podium. Je kunt de parameters in de code aanpassen om het spel aan te passen.
Het eerste dat we moeten doen is het platform selecteren waar we onze app binnen willen laten, op die manier kunnen we de grootte kiezen voor de afbeeldingen die we gebruiken.
Het iOS-platform heeft deze kenmerken:
Omdat Android een open platform is, zijn er veel verschillende apparaten en resoluties. Een paar van de meest voorkomende schermkenmerken zijn:
In deze zelfstudie concentreren we ons op het iOS-platform met het grafische ontwerp, dat specifiek wordt ontwikkeld voor distributie naar een iPhone / iPod touch, maar de hier gepresenteerde code moet ook van toepassing zijn op Android-ontwikkeling met de Corona SDK.
Er zal een eenvoudige en gebruiksvriendelijke interface worden gebruikt, dit omvat meerdere vormen, knoppen, bitmaps en meer.
De interface grafische hulpmiddelen die nodig zijn voor deze tutorial zijn te vinden in de bijgevoegde download.
Afhankelijk van het apparaat dat u hebt geselecteerd, moet u mogelijk de afbeeldingen in de aanbevolen ppi exporteren, u kunt dit doen in uw favoriete afbeeldingseditor.
Ik gebruikte de Grootte aanpassen ... functie in de Preview-app op Mac OS X.
Vergeet niet om de afbeeldingen een beschrijvende naam te geven en deze in uw projectmap op te slaan.
We gebruiken Geluidseffecten om het gevoel van het spel te verbeteren, je kunt de geluiden die in dit voorbeeld worden gebruikt in Soungle.com vinden met de sleutelwoorden klok en gezoem.
Een extern bestand zal worden gebruikt om de applicatie op verschillende apparaten op volledig scherm weer te geven, de config.lua het dossier. Dit bestand toont de oorspronkelijke schermgrootte en de methode die wordt gebruikt om die inhoud te schalen in het geval de app wordt uitgevoerd in een andere schermresolutie.
toepassing = content = width = 320, height = 480, scale = "letterbox",
Laten we de applicatie schrijven!
Open de gewenste Lua-editor (elke teksteditor werkt, maar u hoeft geen syntax te markeren) en bereid u voor op het schrijven van uw geweldige app. Vergeet niet om het bestand op te slaan als main.lua in je projectmap.
We zullen onze code structureren alsof het een Klasse is. Als u ActionScript of Java kent, zou u de structuur vertrouwd moeten vinden.
Necesary Classes Variabelen en constanten Declare Functions contructor (Hoofdfunctie) class methods (other functions) call Hoofdfunctie
display.setStatusBar (display.HiddenStatusBar)
Deze code verbergt de statusbalk. De statusbalk is de balk boven op het scherm van het apparaat die de tijd, het signaal en andere indicatoren toont.
We zullen de Physics-bibliotheek gebruiken om botsingen af te handelen. Gebruik deze code om het te importeren:
lokale fysica = vereisen ('fysica') physics.start ()
Een eenvoudige afbeelding wordt gebruikt als achtergrond voor de applicatie-interface, de volgende regel code slaat deze op.
-- Graphics - [Background] local bg = display.newImage ('bg.png')
Dit is de titelweergave, het zal het eerste interactieve scherm zijn dat in onze game verschijnt, deze variabelen slaan de componenten op.
-- [Title View] lokale titelBg local playBtn local creditsBtn local titleView
Deze weergave toont de credits en copyright van het spel, deze variabele zal worden gebruikt om het op te slaan.
-- [CreditsView] local creditsView
De muren waar de bal kan stuiteren.
Omdat we fysica gebruiken om exact dezelfde polygonen te maken, zullen we elke kant in vier delen breken. De onderdelen zijn gemarkeerd met rode lijnen.
-- [Muren] lokaal l1 lokaal l2 lokaal l3 lokaal l4 lokaal r1 lokaal r2 lokaal r3 lokaal r4
Dit is de balafbeelding, waarnaar wordt verwezen in de volgende variabele.
-- [Ball] lokale bal
We zullen wat obstakels toevoegen in het spel, deze zullen het zijn.
-- [Hitlijnen] lokale hitLine1 lokale hitLine2
Deze ballen zijn het doelwit van de flipperkast. Als je ze raakt, wordt onze score hoger.
-- [Hit Balls] lokale hitBall1 lokale hitBall2 lokale hitBall3
Linker en juiste peddel. Gebruikt om de bal te slaan
-- [Paddles] local pLeft local pRight
Deze knoppen bewegen de paddles waardoor de bal stuitert.
-- [Paddle Buttons] local lBtn local rBtn
Een scorevariabele wordt toegevoegd om deze later op het scherm weer te geven.
-- Scoor lokale score
De volgende regels slaan een referentie op voor de geluidsbestanden.
lokale bel = audio.loadSound ('bell.caf') local buzz = audio.loadSound ('buzz.caf')
Dit is de variabele die we zullen gebruiken, lees de opmerkingen in de code om er meer over te weten.
-- Variabele lokale lastY - gebruikt om de titel bmp positie te onthouden
Verklaar alle functies als lokaal aan het begin.
-- Lokale functies Main = local startButtonListeners = local showCredits = local hideCredits = local showGameView = local gameListeners = local movePaddle = local onCollision = lokale update =
Vervolgens maken we de functie waarmee alle spellogica wordt geïnitialiseerd:
functie Main () - code ... einde
Nu plaatsen we TitleView in de fase en roepen we een functie aan die de tik luisteraars naar de knoppen.
functie Main () titleBg = display.newImage ('title.png', display.contentCenterX - 97, 96) playBtn = display.newImage ('playBtn.png', display.contentCenterX - 30, display.contentCenterY + 10) creditsBtn = display.newImage ('creditsBtn.png', display.contentCenterX - 44.5, display.contentCenterY + 65) titleView = display.newGroup (titleBg, playBtn, creditsBtn) startButtonListeners ('add') end
Deze functie voegt de benodigde luisteraars toe aan de TitleView toetsen.
function startButtonListeners (action) if (action == 'add') then playBtn: addEventListener ('tap', showGameView) creditsBtn: addEventListener ('tap', showCredits) else playBtn: removeEventListener ('tap', showGameView) creditsBtn: removeEventListener ( 'tik', showCredits) einde
Het aftitelingscherm wordt weergegeven wanneer de gebruiker op de knop Over tikt, a tik luisteraar is toegevoegd aan de weergave credits om deze te verwijderen.
functie showCredits: tik op (e) playBtn.isVisible = false creditsBtn.isVisible = false creditsView = display.newImage ('credits.png', 0, display.contentHeight) lastY = titleBg.y transition.to (titleBg, time = 300 , y = (display.contentHeight * 0.5) - (titleBg.height + 50)) transition.to (creditsView, time = 300, y = (display.contentHeight * 0.5) + 35, onComplete = function () creditsView: addEventListener ('tap', hideCredits) end) end
Wanneer het creditsscherm wordt aangebroken, wordt het uit het werkgebied geschud en verwijderd.
functie hideCredits: tik op (e) transition.to (creditsView, time = 300, y = display.contentHeight + 25, onComplete = function () creditsBtn.isVisible = true playBtn.isVisible = true creditsView: removeEventListener ('tap', hideCredits ) display.remove (creditsView) creditsView = nil end) transition.to (titleBg, time = 300, y = lastY); einde
In dit deel van de serie heb je de interface en de basisinstellingen van de game geleerd. In het volgende en laatste deel van de serie behandelen we de paddle-beweging, botsdetectie en de laatste stappen die moeten worden genomen voorafgaand aan de release, zoals app-testen, het maken van een startscherm, het toevoegen van een pictogram en, ten slotte, het bouwen van de app. Blijf op de hoogte voor het laatste deel!