Vytvoření první hry pro Android pomocí sady Corona SDK

Autor: Randy Alexander
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 26 Červen 2024
Anonim
Vytvoření první hry pro Android pomocí sady Corona SDK - Aplikace
Vytvoření první hry pro Android pomocí sady Corona SDK - Aplikace

Obsah


Nejoblíbenější kategorií v Obchodě Google Play byly vždy Hry. Přestože všichni pravděpodobně využíváme klíčové aplikace produktivity, jako je webový prohlížeč, e-mailový klient a aplikace pro zasílání rychlých zpráv, hraní her stále zůstává důležitou součástí mobilního zážitku. Není proto žádným překvapením, že mnoho lidí, kteří se chtějí naučit vyvíjet pro Android, chce začít tvorbou hry. Buďme upřímní, psaní hry je celá zátěž zábavnější než vývoj aplikace produktivity!

Oficiálním jazykem Androidu je Java a oficiálním vývojovým prostředím je Android Studio. Pokud se chcete podívat do Java, doporučuji náš tutoriál pro základní Java a pokud se chcete naučit, jak psát aplikaci pomocí Android Studio, pak vám doporučujeme podívat se na náš tutoriál o psaní první aplikace pro Android. Java a Android studio však nejsou jedinými způsoby, jak se vyvíjet pro Android. Přehled dostupných jazyků a sad SDK naleznete v našem průvodci: Chci vyvinout aplikace pro Android - Jaké jazyky bych se měl učit?


Jednou z SDK zmíněných v příručce programovacích jazyků je Corona, SDK třetí strany určená primárně pro psaní her. Místo Java používá Corona Lua, rychlý skriptovací jazyk, který se snadno naučí, ale přesto je mocný. Corona však není jedinou mobilní herní sadou SDK, která používá Lua. Mezi další dobře známé příklady patří Cocos2d-X, Marmalade a Gideros.

Stáhněte a nainstalujte

Chcete-li začít s aplikací Corona, budete muset stáhnout a nainstalovat sadu SDK. Přejděte na web Corona a stiskněte tlačítko Stáhnout. Než si budete moci sadu stáhnout, musíte si vytvořit účet (který je zdarma). Pokud chcete vytvořit skutečný soubor .apk, nikoli pouze spustit program v emulátoru, budete muset nainstalovat Java 7, nebudete však muset nainstalovat Android SDK. Chcete-li nainstalovat vývojovou sadu Java 7, přejděte na web Oracle, vyhledejte část nazvanou „Java SE Development Kit 7u79“ a stáhněte si verzi pro svůj počítač.


Po instalaci aplikace Corona je třeba ji aktivovat. Jedná se o jednorázový proces, který je zdarma. Spusťte simulátor Corona a souhlaste s licencí. Zadejte e-mailovou adresu a heslo, které jste použili ke stažení, a klikněte na Přihlásit se.

Zahájení projektu

V aplikaci Corona Simulator klikněte na „Nový projekt“. Do pole „Název aplikace:“ zadejte název aplikace a zbytek nastavení ponechte na výchozí hodnoty. Klikněte na „OK“.

Nyní se objeví tři okna. První dva jsou Corona Simulator a Corona Simular Output. Corona také otevře okno průzkumníka souborů se soubory pro váš projekt.

Většina souborů (asi 23 z nich) v adresáři projektu je pro ikonu aplikace! Nejdůležitější soubor pro nás právě teď je main.lua, protože zde napíšeme kód pro naši aplikaci.

Úvod do Lua

Než se pustíme do psaní kódu, musíme provést prohlídku Lua s informacemi. Překladač Lua (pamatujte, že se jedná o skriptovací jazyk, nikoli kompilovaný jazyk) je k dispozici pro Windows, OS X a Linux. Je však vestavěn do Corony, takže v tuto chvíli nemusíte instalovat nic navíc. Nejjednodušší způsob, jak si hrát s Luou, je použít online živé demo.

Můžete najít spoustu dobrých tutoriálů o Lua online a měli byste se podívat na referenční příručku Lua, Programování v Lua, The.Lua.Tutorial a Tutorials Point Lua Tutorial.

Zde je malý program Lua, který vám ukáže některé klíčové rysy Lua:

lokální funkce doubleIt (x) return x * 2 end for i = 1,10,1 do x = doubleIt (i) if (x == 10) then print ("ten") else print (doubleIt (i)) end end

Výše uvedený kód ukazuje tři důležité konstrukty Lua: funkce, smyčky a příkazy if. Funkce doubleIt () je velmi jednoduchý, jen zdvojnásobí předaný parametr X.

Hlavní kód je pro smyčka od 1 do 10. To volá doubleIt () pro každou iteraci. Pokud je návratová hodnota 10 (tj. Kdy i je 5) pak kód vytiskne „deset“, jinak vytiskne pouze výsledek doubleIt ().

Pokud máte nějaké zkušenosti s kódováním, měl by být příkladný kód dostatečně snadný na následování. Pokud se chcete naučit nějaké základní programování, doporučuji vám použít některé z výše uvedených zdrojů pro zdokonalení vašich dovedností.

Psaní hry

Psaní základních programů v Coroně je jednoduché. Musíte se starat pouze o jeden soubor, main.lua, a nechte Coronu, aby provedla všechny těžké zvedání. Hra, kterou se chystáme napsat, je jednoduchá hra „klepnutí“. Balón nebo bomba selže na obrazovce. Pokud hráč poklepe na balón, který boduje, poklepe na bombu, pak se skóre rozdělí jako 2 jako trest. Chcete-li napsat kód, musíte upravit main.lua. Můžete to udělat v libovolném textovém editoru.

Corona SDK má vestavěný 2D fyzikální engine, který velmi usnadňuje vytváření her. Prvním krokem při psaní hry je inicializace fyzického motoru:

local physics = vyžadují ("fyzika") physics.start ()

Kód je docela samozřejmý. Fyzika modulu je načtena a inicializována, je přiřazena k proměnné fyzika. Povolení motoruphysics.start () je nazýván.

Dále vytvoříme některé užitečné proměnné, které budou užitečné nejen pro tuto jednoduchou hru, ale také pro složitější hry. půlW a halfH držte hodnoty pro polovinu šířky obrazovky a polovinu výšky obrazovky:

halfW = display.contentWidth * 0,5 halfH = display.contentHeight * 0.5

Zobrazit objekt je předdefinovaný objekt, který společnost Corona celosvětově zpřístupňuje.

Nyní přichází první krok, který ve skutečnosti způsobí, že se něco stane na obrazovce:

local bkg = display.newImage ("night_sky.png", halfW, halfH)

Stejně jako vlastnosti contentHeight a contentWidth, Zobrazit Objekt má také mnoho užitečných funkcí. nový vzhled() Funkce čte soubor obrázku (v tomto případě .png) a zobrazí jej na obrazovce. Zobrazované objekty jsou vykresleny ve vrstvách, takže jelikož se jedná o první obrázek, který vkládáme na obrazovku, bude to vždy pozadí (pokud to kód výslovně neudělá). Parametry půlW a halfH řekněte Coroně, aby umístila obrázek do středu.

V tomto okamžiku můžete spustit kód v emulátoru a zobrazit obrázek na pozadí. Pokud soubor uložíte, emulátor si všimne, že se soubor změnil a nabídne opětovné spuštění. Pokud se tak nestane, použijte File-> Relaunch.

Protože uživatel získá body za klepnutí na balónky, musíme inicializovat proměnnou skóre a zobrazit skóre na obrazovce:

score = 0 scoreText = display.newText (skóre, půlW, 10)

Skóre bude udržováno ve imaginativně pojmenované proměnné skóre,a scoreText je objekt, který zobrazuje skóre. Jako nový vzhled(), newText () dát něco na obrazovku, v tomto případě text. Od té doby scoreText je globální proměnná, můžeme text kdykoli změnit. K tomu se však brzy dostaneme.

Můžete znovu spustit emulátor a zobrazit skóre 0 displeje směrem k horní části obrazovky.

Vlevo: Jen pozadí. Vpravo: Pozadí a skóre.

Teď přichází něco trochu složitější, ale nebojte se, vysvětlím to řádek po řádku:

local function balloonTouched (event) if (event.phase == "begin") then Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = skóre + 1 scoreText.text = konec konce skóre

Výše uvedený kód definuje funkci nazvanou balloonTouched () která se bude volat pokaždé, když klepnete na balón. Ještě jsme neřekli Coroně, aby zavolala tuto funkci pokaždé, když na balón klepnete, to přijde později, ale když to uděláme, je to funkce, která se volá.

Události klepnutím nebo dotykem mají několik fází, z nichž mnohé podporují přetažení. Uživatel položí prst na objekt, jedná se o fázi „zahájenou“. Pokud posouvají prst v libovolném směru, jedná se o fázi „přesunu“. Když uživatel zvedne prst z obrazovky, jedná se o „ukončenou“ fázi.

První řádek balloonTouched () kontrolujeme, že jsme ve „zahájené“ fázi. Chceme odstranit balón a zvýšit skóre, jakmile to bude možné. Pokud je funkce znovu vyvolána pro jiné fáze, jako je „ukončeno“, pak tato funkce nic nedělá.

Uvnitř-li příkaz jsou čtyři řádky kódu. Pojďme se nejprve zabývat posledními dvěma, protože jsou jednodušší.skóre = skóre + 1 pouze zvyšuje skóre o jeden ascoreText.text = skóre změní text skóre na obrazovce tak, aby odrážel nové skóre. Pamatujte, jak jsem to řeklscoreText byl globální a bylo možné k němu přistupovat kdekoli, tak to děláme zde.

Nyní pro první dva řádky. Jakmile balón nebo bomba spadne ze spodní části obrazovky, která stále existuje v paměti aplikace, je to jen tak, že ji nevidíte. Jak hra postupuje, počet těchto objektů mimo obrazovku se bude neustále zvyšovat. Proto musíme mít mechanismus, který odstraní objekty, jakmile jsou mimo dohled. Děláme to ve funkci zvanémimo obrazovku, které jsme dosud nenapsali. Tato funkce bude během hry vyvolána jednou za snímek. Jakmile klepnete na bublinu, musíme ji smazat a odstranit hovor, který kontroluje, zda se bublina nedostala mimo obrazovku.

Linieevent.target:removeSelf () odstraní balón. Když nastane událost dotykem, jedním z parametrů funkce posluchače jeudálost parametr. Říká funkci o události a jaký typ události je, např.event.phase. Také nám říká, na který balón byl klepnut,event.target. removeSelf () funkce dělá to, co říká, že dělá, vymaže objekt (v tomto případě bublinu).

Řádek před tím odstraní posluchače „enterframe“, což je funkce, která se nazývá každý snímek, aby se zjistilo, zda balón spadl z dolní části obrazovky. Budeme se na to dívat podrobněji, když přijdeme psátmimo obrazovku funkce posluchače.

Takže, shrnout.balloonTouched ()zkontroluje, že se jedná o začátek dotykové sekvence. Poté odebere posluchač „enterframe“, což je funkce, která se nazývá každý snímek, aby se zjistilo, zda balón spadl z dolní části obrazovky. Poté odstraní balón, zvýší skóre a zobrazí nové skóre.

To bylo pro balónky, nyní potřebujeme něco podobného pro bomby:

local function bombTouched (event) if (event.phase == "started") then Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = konec konce skóre

Jak vidíte, kód je velmi podobný s výjimkou, že spíše než zvýšení skóre je skóre vynásobeno 0,5 (tj. Děleno 2). math.floor () funkce zaokrouhlí dolů skóre na nejbližší celé číslo. Takže pokud měl hráč skóre 3 a poklepal na bombu, nové skóre by bylo 1 a ne 1,5.

Zmínil jsem se mimo obrazovku () fungovat dříve. Tato funkce se nazývá každý snímek, aby se zkontrolovalo, zda některý objekt nezmizel z obrazovky. Zde je kód:

lokální funkce offscreen (self, event) if (self.y == nil), pak návrat end if if (self.y> display.contentHeight + 50) then Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Při práci na počítači existuje situace známá jako závod. To je místo, kde se stanou dvě věci, ale jedna se může stát první, nebo někdy druhá se může stát první. Je to závod. Některé závodní podmínky nejsou vidět, protože se zdá, že jedna věc se vždy stane první, ale mohou jednoho dne způsobit zajímavé chyby, za správných podmínek se druhá věc stane první a pak se systém rozbije!

V této jednoduché hře je závodní podmínka, protože dvě věci se mohou stát velmi blízko u sebe: poklepáním balónkem a mimo obrazovku () vyvolána funkce, aby se zjistilo, zda se balón neobjevil mimo obrazovku. Výsledkem je, že lze zavolat kód pro odstranění balónu a poté mimo obrazovku () je vyvolána funkce (která se stává 30krát za sekundu). Chcete-li obejít tuto lichou posloupnost událostí mimo obrazovku () funkce musí zkontrolovat, zda y hodnota objektu je nula (null) nebo ne. Pokud to je nula pak to znamená, že objekt již byl smazán, takže jděte, to nejsou droidi, které hledáme.

Pokud je objekt stále ve hře, zkontrolujte jeho polohu, pokud zmizel z obrazovky 50 pixelů, odstraňte jej a odeberte posluchače tak, aby mimo obrazovku () funkce nebude pro tento objekt znovu vyvolána. Kód, který to zajistímimo obrazovku () se nazývá každý rámec je součástí další části kódu.

Celý předpoklad této hry je, že nové balónky nebo bomby budou i nadále klesat dolů na obrazovku. Proto potřebujeme funkci, která vytvoří buď nový balón, nebo novou bombu:

lokální funkce addNewBalloonOrBomb () local startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0.9) if (math.random (1,5) == 1) pak - BOMB! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb)) bomba: addEventListener ("touch", bombTouched) jinde - Balón lokální balón = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balón) balloon.enterFrame = mimo obrazovku Runtime: addEventListener ("enterFrame", balón) balón: addEventListener ("touch", balloonTouched) end end

První řádek funkce rozhodne, kam z balónu spadne X letadlo. Pokud balón nebo bomba vždy spadne uprostřed, nebude to moc zajímavé! TakstartX je náhodné číslo mezi 10 procenty a 90 procenty šířky obrazovky.

Dále je vybráno náhodné číslo mezi 1 a 5.Pokud je číslo 1, bude vypuštěna bomba. Pokud to bude 2, 3, 4 nebo 5, bude balón upuštěn. To znamená, že bomby budou padány kolem 20 procent času.

Bomba a balónový kód jsou docela podobné. Nejprve se zobrazí obrázek (bomba nebo balón) pomocínový vzhled(). To je X pozice je pozicestartX zatímco jeho y poloha je nastavena na -300, tj. mimo horní část obrazovky. Důvodem je to, že chceme, aby objekt padal z vnější strany oblasti obrazovky do viditelné oblasti a poté z dolní části. Protože používáme 2D fyzický stroj, je dobré dát objektu trochu počáteční vzdálenosti, aby spadl, takže může získat určitou rychlost.

Volání naphysics.addBody () vezme obrázek načten nový vzhled() a promění jej v objekt ve fyzickém motoru. To je velmi silné. Jakýkoli soubor obrázku může být vytvořen do těla, které reaguje na gravitaci a kolize pouhým volánímphysics.addBody ().

Poslední tři řádky kódu bomby nebo balónu nastavily posluchače. NastaveníenterFrame Vlastnost říká Coroně, které funkce mají zavolat každý snímek a voláníRuntime: addEventListener () nastaví to. Konečně hovor nabalón: addEventListener () řekne Coroně, která funkce má zavolat, pokud se dotknete bomby nebo balónu.

A teď je hra téměř kompletní. Potřebujeme pouze další dva řádky kódu:

addNewBalloonOrBomb () timer.performWithDelay (500, addNewBalloonOrBomb, 0)

První řádek způsobí pádem první bomby nebo balónu explicitním volánímaddNewBalloonOrBomb (). Druhý řádek nastavuje časovač, který bude volataddNewBalloonOrBomb () každých půl sekundy (500 milisekund). To znamená, že nový balón nebo bomba padne každou půl sekundu.

Nyní můžete spustit hru v emulátoru.

Zde je kompletní seznam main.lua, úplný zdrojový kód projektu pro tuto hru najdete zde na GitHubu.

-------------------------------------------------- ------------------------------------------- - - Padající balón a bomba - Napsal Gary Sims pro - ----------------------------------------------- -------------------------------------------------- - Spusťte fyzika motor místní fyzika = vyžadovat („fyzika“) fyzika.start () - Vypočítat polovinu šířky a výšky obrazovky napůlW = display.contentWidth * 0,5 halfH = display.contentHeight * 0,5 - Nastavit místní pozadí bkg = display.newImage ("night_sky.png", halfW, halfH) - skóre skóre = 0 scoreText = display.newText (skóre, halfW, 10) - vyvoláno, když hráč klepne na balón - zvýší skóre o 1 místní funkci balloonTouched ( event) if (event.phase == "begin") then Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = end end score - Vyvolá se, když bomba je poklepán hráčem - polovina skóre jako penalizace místní funkce bombTouched (event) if (event.phase == "začal") a poté Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = end end score - Odstranění objektů, které vypadly z dolní část obrazovky místní funkce mimo obrazovku (vlastní, událost), pokud (vlastní.r == nula), pak vraťte konec, pokud (self.y> display.contentHeight + 50), pak Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end - Přidání nového padajícího balónu nebo lokální funkce bomby addNewBalloonOrBomb () - Red_ballon.png a bomb.png najdete v repozitáři GitHub local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) pak - BOMB! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb)) bomba: addEventListener ("touch", bombTouched) jinde - Balón lokální balón = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balón) balloon.enterFrame = mimo obrazovku Runtime: addEventListener ("enterFrame", balón) balón: addEventListener ("touch", balloonTouched) end end - Přidání nového balónu nebo bomby nyní addNewBalloonOrBomb () - Pokračujte v přidávání nového balónu nebo bomby každých 0,5 sekundy časovač.performWithDelay (500, addNewBalloonOrBomb, 0)

Další kroky

Dalším krokem je hraní hry na skutečném zařízení Android. Chcete-li vytvořit soubor .apk, klikněte na File-> Build for Android… a vyplňte pole. Výsledkem bude soubor .apk, který můžete zkopírovat do zařízení a poté nainstalovat. Musíte se ujistit, že jste zařízení nakonfigurovali tak, aby umožňovalo instalaci aplikace z neznámých zdrojů. Amazon má k tomu dobrou dokumentaci, protože ji musíte také nainstalovat, abyste nainstalovali Amazon Appstore. Corona také obsahuje průvodce, jak podepsat, vytvořit a otestovat vaši aplikaci na zařízeních Android.

Když je hra úspěšně nainstalována na vašem zařízení, další věcí je vylepšit hru. Například proč nezkusit přidat „pop“ nebo „třesk“, zní všechno, na koho je klepen balón nebo bomba. Corona má pro to API:media.playEventSound ().

Nebo proč nezkoušet přidat třetí typ objektu, řekněte super posílení, které zdvojnásobí aktuální skóre, nebo co třeba nějaká hudba na pozadí?

Zabalit

Psaní her s Coronou je docela vpřed, protože SDK se zabývá věcmi, jako je OpenGL, a zahrnuje vestavěný 2D fyzický engine. Lua se také snadno učí a neměla by být těžká pro každého, kdo má minimální programovací zkušenosti. Web Coronalabs obsahuje spoustu dokumentace včetně mnoha průvodců a návodů.

V méně než 100 řádcích kódu máme funkční hru. Dobře, nevyhraje žádné ceny, ale ukazuje sílu a flexibilitu sady Corona SDK.

Nový aitent Google byl v květnu jedním z vrcholů aplikace Google I / O 2019, která umožňovala rychlejší, plynulejší příkazy a odpovědi než kdykoli předtím....

Aktualizace, 15. října 2019 (16:07 PM ET): Tento článek jme aktualizovali tak, aby odrážel nová oznámení Google Aitant na akci Made by Google 2019. Mezi nové funkce ...

Nejnovější Příspěvky