Pisanie pierwszej gry na Androida za pomocą zestawu Corona SDK

Autor: Randy Alexander
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 26 Czerwiec 2024
Anonim
Android Game Development Using Corona SDK - Introduction & Initial Setting Up
Wideo: Android Game Development Using Corona SDK - Introduction & Initial Setting Up

Zawartość


Najpopularniejszą kategorią w sklepie Google Play zawsze były Gry. Chociaż wszyscy prawdopodobnie używamy kluczowych aplikacji zwiększających produktywność, takich jak przeglądarka internetowa, klient poczty e-mail i aplikacja do obsługi wiadomości błyskawicznych, gry nadal są ważną częścią mobilnego doświadczenia. Nic więc dziwnego, że wiele osób, które chcą nauczyć się tworzyć dla Androida, chce zacząć od stworzenia gry. Bądźmy szczerzy, pisanie gry to o wiele więcej zabawy niż tworzenie aplikacji zwiększających produktywność!

Oficjalnym językiem Androida jest Java, a oficjalnym środowiskiem programistycznym jest Android Studio. Jeśli chcesz zapoznać się z Javą, sugeruję nasz samouczek z podstawami języka Java, a jeśli chcesz nauczyć się pisać aplikację za pomocą Android Studio, radzę zapoznać się z naszym samouczkiem na temat pisania pierwszej aplikacji na Androida. Jednak studio Java i Android nie są jedynymi sposobami programowania na Androida. Przegląd dostępnych języków i zestawów SDK można znaleźć w naszym przewodniku: Chcę opracować aplikacje na Androida - Jakich języków powinienem się nauczyć?


Jednym z zestawów SDK wymienionych w przewodniku po językach programowania jest Corona, zewnętrzny zestaw SDK przeznaczony głównie do pisania gier. Zamiast Javy Corona korzysta z Lua, szybkiego języka skryptowego, który jest łatwy do nauczenia się, a jednocześnie potężny. Jednak Corona nie jest jedynym zestawem SDK do gier mobilnych, który korzysta z Lua, inne dobrze znane przykłady to Cocos2d-X, Marmolada i Gideros.

Ściągnij i zainstaluj

Aby rozpocząć pracę z programem Corona, musisz pobrać i zainstalować zestaw SDK. Przejdź do strony internetowej Corona i naciśnij przycisk pobierania. Przed pobraniem zestawu musisz utworzyć konto (bezpłatne). Jeśli chcesz zbudować rzeczywisty plik .apk zamiast uruchamiać program w emulatorze, musisz zainstalować Javę 7, jednak nie musisz instalować zestawu SDK systemu Android. Aby zainstalować zestaw Java 7 Development Kit, przejdź do witryny Oracle, poszukaj sekcji o nazwie „Java SE Development Kit 7u79 ″ i pobierz wersję na swój komputer.


Po zainstalowaniu aplikacji Corona musisz ją aktywować. Jest to jednorazowy proces, który jest bezpłatny. Uruchom symulator Corona i zaakceptuj licencję. Wpisz adres e-mail i hasło użyte do pobrania, a następnie kliknij Zaloguj się.

Rozpoczęcie projektu

W Symulatorze Corona kliknij „Nowy projekt”. Wprowadź nazwę swojej aplikacji w polu „Nazwa aplikacji:” i pozostaw pozostałe ustawienia na wartościach domyślnych. Kliknij OK."

Pojawią się teraz trzy okna. Pierwsze dwa to Symulator Korony i Symulacja Wyjścia Corony. Corona otworzy także okno eksploratora plików pokazujące pliki dla twojego projektu.

Większość plików (około 23) w katalogu projektu dotyczy ikony aplikacji! Najważniejszym plikiem dla nas jest teraz main.lua, ponieważ tutaj napiszemy kod dla naszej aplikacji.

Wprowadzenie do Lua

Zanim zaczniemy pisać kod, musimy udać się na wycieczkę po Luie z informacją o gwizdku. Interpretator Lua (pamiętaj, że jest to język skryptowy, a nie skompilowany) jest dostępny dla systemów Windows, OS X i Linux. Jest jednak wbudowany w Corona, więc w tej chwili nie musisz instalować żadnych dodatkowych elementów. Najłatwiejszym sposobem gry z Luą jest skorzystanie z demonstracji online na żywo.

Możesz znaleźć wiele dobrych samouczków na temat Lua online i powinieneś zajrzeć do Lua Reference Manual, Programowania w Lua, The.Lua.Tutorial i The Tutorials Point Lua Tutorial.

Oto mały program Lua, który pokaże niektóre z kluczowych funkcji Lua:

funkcja lokalna doubleIt (x) zwraca x * 2 koniec dla i = 1,10,1 do x = doubleIt (i) jeśli (x == 10) następnie wypisuje („dziesięć”), w przeciwnym razie drukuje (doubleIt (i)) koniec

Powyższy kod pokazuje trzy ważne konstrukcje Lua: funkcje, pętle i instrukcje if. Funkcja doubleIt () jest bardzo prosty, podwaja przekazany parametr x.

Główny kod to dla pętla od 1 do 10. Wzywa doubleIt () dla każdej iteracji. Jeśli wartość zwracana to 10 (tj. Kiedy ja to 5), a następnie kod wypisuje „dziesięć”, w przeciwnym razie po prostu wypisuje wynik doubleIt ().

Jeśli masz jakiekolwiek doświadczenie w programowaniu, przykładowy kod powinien być wystarczająco łatwy do naśladowania. Jeśli chcesz nauczyć się podstaw programowania, sugeruję skorzystanie z zasobów wymienionych powyżej w celu doskonalenia umiejętności.

Pisanie gry

Pisanie podstawowych programów w Coronie jest proste. Musisz zająć się tylko jednym plikiem, main.lua, i niech Korona wykonuje wszystkie ciężkie prace. Gra, którą zamierzamy napisać, jest prostą grą typu „dotknij”. Balon lub bomba zawalą ekran. Jeśli gracz stuknie balon, zdobędzie punkt, stuknie bombę, a wynik zostanie podzielony przez 2, jako kara. Aby napisać kod, musisz go edytować main.lua. Możesz to zrobić w dowolnym edytorze tekstu.

Corona SDK ma wbudowany silnik fizyki 2D, dzięki czemu budowanie gier jest bardzo łatwe. Pierwszym krokiem do napisania gry jest zainicjowanie silnika fizyki:

fizyka lokalna = wymagają („fizyki”) physics.start ()

Kod jest dość zrozumiały. Fizyka modułu jest ładowana i inicjowana, przypisywana jest do zmiennej fizyka. Aby włączyć silnikphysics.start () nazywa się.

Następnie tworzymy przydatne zmienne, które będą przydatne nie tylko w tej prostej grze, ale także w bardziej złożonych grach. połowa W. i półH zachowaj wartości dla połowy szerokości ekranu i połowy wysokości ekranu:

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

The pokaz obiekt jest predefiniowanym obiektem, który Corona udostępnia na całym świecie.

Teraz jest pierwszy krok, który sprawia, że ​​coś się dzieje na ekranie:

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

Jak również właściwości takie jak contentHeight i contentWidth, pokaz Obiekt ma również wiele przydatnych funkcji. The nowy wygląd() funkcja odczytuje plik obrazu (w tym przypadku .png) i wyświetla go na ekranie. Obiekty wyświetlane są renderowane warstwowo, więc ponieważ jest to pierwszy obraz, który umieszczamy na ekranie, zawsze będzie to tło (chyba że kod wyraźnie coś zmieni, aby to zmienić). Parametry połowa W. i półH powiedz Coronie, aby umieściła obraz na środku.

W tym momencie możesz uruchomić kod w emulatorze i zobaczyć obraz tła. Jeśli zapiszesz plik, emulator zauważy, że plik się zmienił i zaoferuje ponowne uruchomienie. Jeśli tak się nie stanie, użyj polecenia Plik-> Uruchom ponownie.

Ponieważ użytkownik zdobędzie punkty za stukanie w balony, musimy zainicjować zmienną wyniku i wyświetlić wynik na ekranie:

score = 0 scoreText = display.newText (wynik, połowa W, 10)

Wynik będzie przechowywany w zmiennie nazwanej zmiennej wynik,i scoreText to obiekt, który wyświetla wynik. Lubić nowy wygląd(), newText () umieść coś na ekranie, w tym przypadku tekst. Od scoreText jest zmienną globalną, wówczas możemy zmienić tekst w dowolnym momencie. Ale wkrótce do tego dojdziemy.

Możesz ponownie uruchomić emulator i zobaczyć wynik 0 wyświetlany w górnej części ekranu.

Po lewej: tylko tło. Po prawej: tło i wynik.

Teraz pojawia się coś nieco trudniejszego, ale nie martw się, wyjaśnię to wiersz po wierszu:

funkcja lokalna balloonTouched (zdarzenie) jeśli (event.phase == „rozpoczęty”) to Runtime: removeEventListener („enterFrame”, event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

Powyższy kod definiuje funkcję o nazwie balloonTouched () które będą wywoływane za każdym razem, gdy stuknięty zostanie balon. Nie powiedzieliśmy jeszcze Coronie, aby wywoływała tę funkcję za każdym razem, gdy stuknięty jest balon, to przyjdzie później, ale kiedy to zrobimy, zostanie wywołana funkcja.

Zdarzenia dotknij lub dotknij mają kilka etapów, z których wiele obsługuje przeciąganie. Użytkownik kładzie palec na obiekcie, jest to faza „rozpoczęta”. Jeśli przesuwają palec w dowolnym kierunku, jest to faza „przesunięcia”. Gdy użytkownik podnosi palec z ekranu, jest to faza „zakończona”.

Pierwsza linia balloonTouched () czeki jesteśmy w fazie „rozpoczętej”. Chcemy usunąć balon i zwiększyć wynik tak szybko, jak to możliwe. Jeśli funkcja zostanie ponownie wywołana dla innych faz, takich jak „zakończony”, wówczas funkcja nic nie robi.

W środkuJeśli instrukcja to cztery linie kodu. Zajmijmy się najpierw dwoma ostatnimi, ponieważ są one prostsze.wynik = wynik + 1 tylko zwiększa wynik o jeden iscoreText.text = wynik zmienia tekst partytury na ekranie, aby odzwierciedlić nową partyturę. Pamiętaj, jak to powiedziałemscoreText był globalny i można go było uzyskać wszędzie, no cóż, właśnie to robimy tutaj.

Teraz pierwsze dwie linie. Gdy balon lub bomba spadnie z dołu ekranu, nadal istnieje w pamięci aplikacji, po prostu nie widać. W miarę postępu gry liczba tych obiektów poza ekranem będzie stale rosła. Dlatego musimy mieć mechanizm, który usuwa obiekty, gdy są poza zasięgiem wzroku. Robimy to w funkcji o nazwiepoza ekranem, których jeszcze nie napisaliśmy. Ta funkcja będzie wywoływana raz na klatkę podczas gry. Po stuknięciu balonu musimy go usunąć i usunąć połączenie sprawdzające, czy balon zniknął z ekranu.

Liniaevent.target:removeSelf () usuwa balon. Kiedy występuje zdarzenie dotykowe, jednym z parametrów funkcji nasłuchiwania jestzdarzenie parametr. Informuje funkcję o zdarzeniu i jakiego rodzaju jest to zdarzenie, np.event.phase. Mówi nam również, który balon został stuknięty,event.target. TheremoveSelf () funkcja robi to, co mówi, robi, usuwa obiekt (w tym przypadku balon).

Poprzednia linia usuwa detektor „enterframe”, który jest funkcją wywoływaną w każdej ramce, aby sprawdzić, czy balon spadł z dołu ekranu. Przyjrzymy się temu bardziej szczegółowo, kiedy zaczniemy pisaćpoza ekranem funkcja nasłuchiwania.

Podsumowując.balloonTouched ()sprawdza, czy to początek sekwencji dotykowej. Następnie usuwa detektor „enterframe”, który jest funkcją wywoływaną co ramkę, aby sprawdzić, czy balon spadł z dołu ekranu. Następnie usuwa balon, zwiększa wynik i wyświetla nowy wynik.

To było dla balonów, teraz potrzebujemy czegoś podobnego do bomb:

funkcja lokalna bombTouched (zdarzenie) jeśli (event.phase == „rozpoczęło się”), a następnie Runtime: removeEventListener („enterFrame”, event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = koniec wyniku

Jak widać, kod jest bardzo podobny, z tym wyjątkiem, że zamiast zwiększać wynik, wynik jest mnożony przez 0,5 (tj. Dzielony przez 2). The math.floor () funkcja zaokrągla wynik do najbliższej liczby całkowitej. Więc jeśli gracz miał wynik 3 i stuknął bombę, nowy wynik wynosiłby 1, a nie 1,5.

Wspomniałem o offscreen () funkcja wcześniej. Ta funkcja będzie wywoływana w każdej ramce, aby sprawdzić, czy obiekt zniknął z ekranu. Oto kod:

funkcja lokalna poza ekranem (self, zdarzenie) if (self.y == zero) to zwróć koniec if (self.y> display.contentHeight + 50), a następnie Runtime: removeEventListener („enterFrame”, self) self: removeSelf () end end

W informatyce występuje sytuacja wyścigu. To będą dwie rzeczy, które mogą się zdarzyć, ale jedna może zdarzyć się pierwsza, a czasem druga może zdarzyć się pierwsza. To jest wyścig. Niektóre warunki wyścigu są niewidoczne, ponieważ jedna rzecz zawsze zdarza się najpierw, ale mogą powodować ciekawe błędy w tym dniu, w odpowiednich warunkach, druga rzecz zdarza się najpierw, a następnie system się psuje!

W tej prostej grze występują warunki wyścigowe, ponieważ dwie rzeczy mogą się zdarzyć bardzo blisko siebie: stukanie balonu i ... offscreen () wywoływana jest funkcja sprawdzania, czy balon zszedł z ekranu. W rezultacie można wywołać kod usuwający balon, a następnie offscreen () funkcja jest wywoływana (co dzieje się jak 30 razy na sekundę). Aby obejść tę dziwną sekwencję zdarzeń offscreen () funkcja musi sprawdzić, czy y wartość obiektu to zero (zero) lub nie. Jeśli to jest zero oznacza to, że obiekt został już usunięty, więc poruszaj się dalej, to nie są droidy, których szukamy.

Jeśli obiekt jest nadal w grze, sprawdź jego położenie, jeśli zniknął o 50 pikseli z ekranu, usuń go i usuń detektor, aby offscreen () funkcja nie będzie ponownie wywoływana dla tego obiektu. Kod, aby się upewnićoffscreen () nazywa się każda ramka jest częścią następnej sekcji kodu.

Założeniem tej gry jest to, że nowe balony lub bomby będą nadal spadać po ekranie. Dlatego potrzebujemy funkcji, która utworzy nowy balon lub nową bombę:

funkcja lokalna addNewBalloonOrBomb () lokalny startX = mat.random (display.contentWidth * 0,1, display.contentWidth * 0,9) jeśli (mat.random (1,5) == 1) to - BOMB! lokalna bomba = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener („enterFrame”, bomb) bomb: addEventListener („touch”, bombTouched) else - Balon lokalny balon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balon) balon.enterFrame = offscreen Runtime: addEventListener („enterFrame”, balon) balon: addEventListener („dotyk”, balloonTouched) koniec

Pierwszy wiersz funkcji decyduje, z którego miejsca spadnie balon x samolot. Jeśli balon lub bomba zawsze spadały na środek, nie będzie to bardzo interesujące! WięcstartX jest liczbą losową od 10 do 90 procent szerokości ekranu.

Następnie losowa liczba jest wybierana między 1 a 5.Jeśli liczba wynosi 1, bomba zostanie zrzucona. Jeśli to 2, 3, 4 lub 5, balon zostanie upuszczony. Oznacza to, że bomby będą zrzucane przez około 20 procent czasu.

Kod bomby i balonu są dość podobne. Najpierw wyświetla się obraz (bomba lub balon) za pomocąnowy wygląd(). Jego x pozycja jest taka jakstartX podczas gdy jest y pozycja jest ustawiona na -300, tj. u góry ekranu. Powodem tego jest to, że chcemy, aby obiekt spadł spoza obszaru ekranu do obszaru widocznego, a następnie z dołu. Ponieważ korzystamy z silnika fizyki 2D, dobrze jest dać obiektowi początkową odległość do upadku, aby mogła ona zyskać trochę prędkości.

Wezwanie dophysics.addBody () pobiera obraz załadowany przez nowy wygląd() i zamienia go w obiekt w silniku fizyki. To jest bardzo potężne. Każdy plik obrazu można przekształcić w ciało, które reaguje na grawitację i kolizje tylko przez wywołaniephysics.addBody ().

Ostatnie trzy wiersze kodu bomby lub balonu ustawiają słuchaczy. UstawianieenterFrame właściwość informuje Corona, która funkcja ma wywoływać każdą ramkę i wywołanieRuntime: addEventListener () ustawia to. Wreszcie połączenie zbalon: addEventListener () informuje Corona, którą funkcję wywołać, jeśli dotknie się bomby lub balonu.

A teraz gra jest prawie ukończona. Potrzebujemy tylko dwóch kolejnych wierszy kodu:

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

Pierwsza linia powoduje, że pierwsza bomba lub balon spadnie, wyraźnie dzwoniącaddNewBalloonOrBomb (). Druga linia ustawia timer, który zadzwoniaddNewBalloonOrBomb () co pół sekundy (500 milisekund). Oznacza to, że nowy balon lub bomba spadnie co pół sekundy.

Możesz teraz uruchomić grę w emulatorze.

Oto pełna lista dla main.lua, pełny kod źródłowy projektu dla tej gry można znaleźć tutaj na GitHub.

-------------------------------------------------- --------------------------------------- - - Spadająca gra balon i bomba - Wpisany przez Gary Sims dla - ------------------------------------------- ---------------------------------------------- -- Zacząć silnik fizyki fizyka lokalna = wymagają („fizyki”) physics.start () - Oblicz połowę szerokości i wysokości ekranu połowa W = display.contentWidth * 0,5 halfH = display.contentHeight * 0,5 - Ustaw lokalne tło bkg = display.newImage ("night_sky.png", połowa W, połowa H) - Wynik wyniku = 0 scoreText = display.newText (wynik, połowa W, 10) - Wywoływany, gdy gracz stuknie balon - Zwiększ wynik o 1 balon funkcji lokalnej Dotknięty ( zdarzenie) jeśli (event.phase == „rozpoczęty”), a następnie Runtime: removeEventListener („enterFrame”, event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end - Wywoływany, gdy bomba jest stukana przez gracza - połowa wyniku jako funkcja lokalna karna bomba Dotknięta (zdarzenie) if (event.phase == „rozpoczęty”), a następnie Runtime: removeEventListener („enterFrame”, event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = end end score - Usuń obiekty, które spadły z u dołu ekranu funkcja lokalna offscreen (self, event) if (self.y == zero), a następnie zwróć koniec if (self.y> display.contentHeight + 50), a następnie Runtime: removeEventListener („enterFrame”, self) self: removeSelf () koniec końca - Dodaj nową funkcję lokalną opadającego balonu lub bomby addNewBalloonOrBomb () - Możesz znaleźć red_ballon.png i bomb.png w lokalnym repozytorium GitHub startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0,9) jeśli (matematyczny losowy (1,5) == 1) to - BOMBA! lokalna bomba = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener („enterFrame”, bomb) bomb: addEventListener („touch”, bombTouched) else - Balon lokalny balon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balon) balon.enterFrame = offscreen Runtime: addEventListener („enterFrame”, balon) balon: addEventListener („dotyk”, balloonTouched) end end - Dodaj nowy balon lub bombę teraz addNewBalloonOrBomb () - Dodawaj nowy balon lub bombę co 0,5 sekundy timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Następne kroki

Następnym krokiem jest zagranie w grę na prawdziwym urządzeniu z Androidem. Aby zbudować plik APK, kliknij Plik-> Kompiluj dla Androida… i wypełnij pola. Rezultatem będzie plik .apk, który możesz skopiować na urządzenie, a następnie zainstalować. Musisz upewnić się, że urządzenie zostało skonfigurowane tak, aby umożliwić instalację aplikacji z nieznanych źródeł. Amazon ma dobrą dokumentację na ten temat, ponieważ musisz także to ustawić, aby zainstalować Amazon Appstore. Corona ma również przewodnik na temat podpisywania, budowania i testowania aplikacji na urządzeniach z Androidem.

Po pomyślnym zainstalowaniu gry na urządzeniu, należy ją ulepszyć. Na przykład, dlaczego nie spróbować dodać dźwięku „pop” lub „huk” do wszystkiego, co stuknie balon lub bomba. Corona ma do tego interfejs API:media.playEventSound ().

A może spróbujesz dodać trzeci typ obiektu, powiedzmy super boost, który podwaja aktualny wynik, a może trochę muzyki w tle?

Zakończyć

Pisanie gier w Coronie jest dość proste, ponieważ SDK obsługuje takie rzeczy jak OpenGL i zawiera wbudowany silnik fizyki 2D. Lua jest również łatwa do nauczenia i nie powinna być trudna dla każdego, kto ma choćby minimum doświadczenia w programowaniu. Witryna Coronalabs zawiera wiele dokumentacji, w tym wiele przewodników i samouczków.

W mniej niż 100 liniach kodu mamy działającą grę. OK, nie wygra żadnych nagród, ale pokazuje moc i elastyczność zestawu Corona SDK.

Każdego roku najnowzy wpi z linii Galaxy Note taje ię jednym z najgorętzych telefonów roku. W zezłym roku oba recenzenci i czytelnicy uznali amunga Galaxy Note 9 za najlepzy telefon roku. Teraz ...

Nie bez powodu rozmawialiśmy o najnowzych flagowcach amunga, Galaxy Note 10 i Note 10 Plu. ą nie tylko dwoma obecnie najlepiej wypoażonymi urządzeniami na rynku, ale także jednymi z najbardziej dzieln...

Nasza Rekomendacja