Menulis permainan Android pertama anda menggunakan SDK Corona

Pengarang: Randy Alexander
Tarikh Penciptaan: 1 April 2021
Tarikh Kemas Kini: 26 Jun 2024
Anonim
Writing your first Android game using the Corona SDK!
Video.: Writing your first Android game using the Corona SDK!

Kandungan


Kategori yang paling popular di Google Play Store selalu Permainan. Walaupun kita semua mungkin menggunakan aplikasi produktiviti utama seperti penyemak imbas web, pelanggan e-mel, dan aplikasi pesanan segera, permainan masih menjadi bahagian penting dalam pengalaman mudah alih. Jadi, tidak hairanlah ramai orang yang ingin belajar untuk membangunkan untuk Android mahu bermula dengan membuat permainan. Juga, mari bersikap jujur, menulis permainan adalah beban penuh lebih menyeronokkan daripada membangunkan aplikasi produktiviti!

Bahasa rasmi Android adalah Java dan persekitaran pembangunan rasmi adalah Android Studio. Sekiranya anda ingin melihat Java maka saya cadangkan tutorial asas Java kami, dan jika anda ingin belajar cara menulis aplikasi menggunakan Android Studio maka saya cadangkan anda menyemak tutorial kami untuk menulis aplikasi Android pertama anda. Namun, Java dan Android studio bukan satu-satunya cara untuk membangunkan untuk Android. Anda boleh menemui gambaran keseluruhan bahasa dan SDK yang tersedia di dalam panduan kami: Saya ingin mengembangkan Android Apps - Bahasa apa yang harus saya pelajari?


Salah satu SDK yang disebut dalam panduan bahasa pengaturcaraan ialah Corona, SDK pihak ketiga yang direka terutamanya untuk menulis permainan. Daripada Jawa, Corona menggunakan Lua, bahasa skrip cepat yang mudah dipelajari namun kuat. Walau bagaimanapun, Corona bukan satu-satunya SDK permainan mudah alih yang menggunakan Lua, contoh lain yang terkenal termasuk Cocos2d-X, Marmalade, dan Gideros.

muat turun dan pasang

Untuk memulakan Corona anda perlu memuat turun dan memasang SDK. Pergi ke laman web Corona dan tekan butang muat turun. Anda perlu membuat akaun (yang percuma) sebelum anda boleh memuat turun kit tersebut. Jika anda ingin membina fail .apk sebenarnya dan bukannya hanya menjalankan program anda dalam emulator, anda perlu memasang Java 7, namun anda tidak perlu memasang SDK Android. Untuk memasang Java 7 Development Kit pergi ke laman web Oracle, cari bahagian yang disebut "Java SE Development Kit 7u79" dan muat turun versi untuk PC anda.


Sebaik sahaja anda memasang Corona anda perlu mengaktifkannya. Ini adalah proses satu masa, yang percuma. Mulakan Simulator Corona dan bersetuju dengan lesen itu. Masukkan alamat e-mel dan kata laluan yang anda gunakan untuk memuat turun, dan klik Masuk.

Memulakan projek

Dari dalam Corona Simulator klik pada "Projek Baru." Masukkan nama untuk aplikasi anda dalam medan "Nama Permohonan:" dan biarkan seluruh seting pada lalai mereka. Klik "OK."

Tiga tingkap kini akan muncul. Dua yang pertama ialah Corona Simulator dan Corona Simular Output. Corona juga akan membuka tetingkap fail explorer yang menunjukkan fail untuk projek anda.

Majoriti fail (kira-kira 23 daripada mereka) dalam direktori projek adalah untuk ikon aplikasi! Fail yang paling penting buat kami sekarang ialah main.lua, kerana ini adalah di mana kita akan menulis kod untuk aplikasi kami.

Pengenalan kepada Lua

Sebelum kita menulis kod itu, kita perlu membuat turuan berhenti Lua. Jurubahasa Lua (ingat ini adalah bahasa skrip, bukan bahasa yang dikompil) boleh didapati untuk Windows, OS X, dan Linux. Walau bagaimanapun ia terbina dalam kepada Corona, jadi pada masa ini anda tidak perlu memasang apa-apa tambahan. Cara paling mudah untuk bermain dengan Lua adalah menggunakan demo live online.

Anda boleh mendapatkan banyak tutorial yang bagus mengenai Lua dalam talian dan anda harus melihat Manual Rujukan Lua, Pengaturcaraan di Lua, The.Lua.Tutorial, dan Tutorial Tutorial Point Lua.

Berikut adalah program Lua kecil yang akan menunjukkan kepada anda beberapa ciri utama Lua:

(x) x = doubleIt (i) jika (x == 10) maka cetak ("sepuluh") cetak lain (doubleIt (i)

Kod di atas menunjukkan tiga penting Lua membina: fungsi, gelung, dan jika pernyataan. Fungsinya doubleIt () sangat mudah, ia hanya menggandakan parameter lulus x.

Kod utama ialah untuk gelung dari 1 hingga 10. Ia memanggil doubleIt () untuk setiap lelaran. Jika nilai pulangan adalah 10 (iaitu ketika i adalah 5) maka kod itu mencetak "sepuluh" jika tidak ia hanya mencetak hasil daripada doubleIt ().

Jika anda mempunyai pengalaman pengekodan maka kod contoh harus cukup mudah untuk diikuti. Sekiranya anda ingin mempelajari beberapa pengaturcaraan asas maka saya cadangkan anda menggunakan beberapa sumber yang dikaitkan di atas untuk mengasah kemahiran anda.

Menulis permainan

Menulis program asas di Corona adalah mudah. Anda hanya perlu kebimbangan diri anda dengan satu fail, main.lua, dan biarkan Corona melakukan semua angkat berat. Permainan yang akan kita tulis adalah permainan "ketuk" yang mudah. Balon atau bom akan gagal di skrin. Jika pemain mengetuk belon mereka menjaringkan satu titik, mereka mengetuk bom kemudian skornya akan dibahagikan dengan 2, sebagai penalti. Untuk menulis kod yang anda perlu edit main.lua. Anda boleh melakukan ini dalam mana-mana editor teks.

The Corona SDK mempunyai enjin fizik 2D terbina dalam, yang menjadikan permainan bangunan sangat mudah. Langkah pertama dalam menulis permainan adalah untuk memulakan enjin fizik:

fizik tempatan = memerlukan ("fizik") physics.start ()

Kod ini agak jelas. Fizik modul dimuat dan dimulakan, ia ditugaskan kepada pembolehubah fizik. Untuk membolehkan enjinphysics.start () dipanggil.

Seterusnya kita buat beberapa pemboleh ubah yang berguna yang berguna bukan sahaja untuk permainan mudah ini, tetapi juga untuk permainan yang lebih kompleks. halfW dan setengahH memegang nilai untuk separuh lebar skrin dan separuh ketinggian skrin:

halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5

The paparan Objek adalah objek yang telah ditentukan sebelumnya yang mana Corona boleh didapati di seluruh dunia.

Sekarang datang langkah pertama yang sebenarnya membuat sesuatu berlaku pada skrin:

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

Serta sifat seperti contentHeight dan contentWidth, yang paparan objek juga mempunyai banyak fungsi berguna. The newImage () fungsi membaca fail imej (dalam kes ini .png) dan memaparkannya pada skrin. Objek paparan diberikan dalam lapisan, jadi kerana ini adalah imej pertama yang kita letakkan pada skrin maka ia akan sentiasa menjadi latar belakang (melainkan kod tersebut secara eksplisit melakukan sesuatu untuk mengubahnya). Parameter halfW dan setengahH beritahu Corona untuk meletakkan imej di tengah.

Pada titik ini, anda boleh menjalankan kod dalam emulator dan melihat imej latar belakang. Jika anda menyimpan fail maka emulator akan melihat bahawa fail telah berubah dan menawarkan untuk melancarkan semula. Jika itu tidak berlaku maka gunakan Fail-> Mulakan semula.

Oleh kerana pengguna akan mendapat mata untuk mengetuk belon, kita perlu memulakan pembolehubah skor dan memaparkan skor pada skrin:

skor = 0 scoreText = display.newText (skor, halfW, 10)

Skor akan disimpan dalam pembolehubah yang dinamakan secara imajinatif skor,dan scoreText adalah objek yang memaparkan skor. Suka newImage (), newText () letakkan sesuatu pada skrin, dalam kes ini teks. Sejak scoreText adalah pemboleh ubah global maka kita boleh menukar teks pada bila-bila. Tetapi kita akan sampai ke sana tidak lama lagi.

Anda boleh melancarkan semula emulator dan melihat skor 0 paparan ke arah bahagian atas skrin.

Kiri: Hanya latar belakang. Kanan: Latar Belakang dan skor.

Sekarang ada sesuatu yang agak rumit, tetapi jangan bimbang saya akan menerangkan baris demi baris:

(jika event event == "bermula") maka Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

Kod di atas mentakrifkan fungsi yang dipanggil balloonTouched () yang akan dipanggil setiap kali belon ditoreh. Kami belum lagi memberitahu Corona untuk memanggil fungsi ini setiap kali belon ditoreh, yang akan datang kemudian, tetapi ketika kita melakukan ini adalah fungsi yang akan dipanggil.

Ketik atau sentuh acara mempunyai beberapa peringkat, banyak untuk menyokong menyeret. Pengguna meletakkan jari mereka pada objek, inilah fasa "mula". Jika mereka meluncurkan jari mereka ke mana-mana arah, itulah fasa "dipindahkan". Apabila pengguna mengangkat jari mereka dari skrin, itu adalah fasa "berakhir".

Garis pertama balloonTouched () cek kita berada dalam fasa "bermula". Kami mahu mengeluarkan balon dan kenaikan skor secepat mungkin. Jika fungsi dipanggil sekali lagi untuk fasa-fasa lain seperti "berakhir" maka fungsinya tidak berbuat apa-apa.

Di dalamjika Kenyataannya adalah empat baris kod. Mari kita berurusan dengan yang terakhir dua, kerana mereka lebih mudah.skor = skor + 1 hanya kenaikan skor dengan satu danscoreText.text = score mengubah teks skor pada skrin untuk mencerminkan skor baru. Ingat bagaimana saya berkata demikianscoreText adalah global dan boleh diakses di mana sahaja, baik itu yang kita lakukan di sini.

Sekarang untuk dua baris pertama. Sebaik sahaja belon atau bom jatuh di bahagian bawah skrin, ia masih wujud dalam memori aplikasinya, itu hanya anda tidak dapat melihatnya. Memandangkan permainan berlangsung bilangan objek luar skrin ini akan semakin meningkat. Oleh itu, kita perlu mempunyai mekanisme yang memadamkan objek sebaik sahaja ia tidak dapat dilihat. Kami melakukannya dalam fungsi yang dipanggiloffscreen, yang belum kita tulis lagi. Fungsi itu akan dipanggil sekali setiap bingkai semasa permainan. Sebaik sahaja balon telah ditoreh maka kita perlu memadamkannya dan mengeluarkan panggilan yang memeriksa jika balon telah dimatikan.

Garisan ituevent.target:removeSelf () memadamkan balon. Apabila satu peristiwa sentuh berlaku salah satu parameter fungsi pendengar ialahacara parameter. Ia memberitahu fungsi tentang peristiwa dan jenis peristiwa itu, mis.event.phase. Ia juga memberitahu kita belon mana yang telah disapu,event.target. TheremoveSelf () fungsi berfungsi seperti apa yang dikatakannya, ia memadamkan objek (dalam hal ini belon).

Baris sebelum itu membuang pendengar "enterframe", yang merupakan fungsi yang dipanggil setiap bingkai untuk melihat apakah belon itu telah jatuh dari bahagian bawah skrin. Kami akan melihatnya dengan lebih terperinci apabila kami datang untuk menulisoffscreen fungsi pendengar.

Jadi, untuk recap.balloonTouched ()memeriksa bahawa ini adalah permulaan urutan sentuhan. Ia kemudian membuang pendengar "enterframe", yang merupakan fungsi yang dipanggil setiap bingkai untuk melihat jika belon telah jatuh dari bahagian bawah skrin. Ia kemudian memadamkan belon, meningkatkan skor dan memaparkan skor baru.

Itu untuk belon, kini kita memerlukan sesuatu yang serupa untuk bom:

fungsi tempatan bomTouched (event) jika (event.phase == "bermula") maka Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = akhir hujung skor

Seperti yang anda dapat lihat kod ini sangat mirip dengan pengecualian yang bukannya bertambahnya skor, skor didarabkan sebanyak 0.5 (iaitu dibahagikan dengan 2). The math.floor () fungsi mengarahkan skor ke integer terdekat. Jadi jika pemain mempunyai skor 3 dan mengetuk bom maka skor baru akan menjadi 1, dan tidak 1.5.

Saya menyebutnya offscreen () berfungsi lebih awal. Fungsi ini akan dipanggil setiap bingkai untuk memeriksa jika objek telah dimatikan skrin. Berikut ialah kod:

jika fungsi (self.y == nil) kemudian kembali jika (self.y> display.contentHeight + 50) kemudian Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Dalam pengkomputeran terdapat keadaan yang dikenali sebagai keadaan perlumbaan. Di sinilah dua perkara akan berlaku tetapi seseorang mungkin akan berlaku terlebih dahulu, atau kadang-kadang yang lain mungkin berlaku terlebih dahulu. Ia adalah perlumbaan. Sesetengah keadaan perlumbaan tidak kelihatan kerana satu perkara selalu seolah-olah berlaku dahulu, tetapi mereka boleh menyebabkan pepijat yang menarik dalam satu hari itu, di bawah keadaan yang betul, perkara yang lain berlaku dahulu dan kemudian sistemnya pecah!

Terdapat keadaan perlumbaan dalam permainan sederhana ini kerana dua perkara boleh berlaku dengan sangat dekat antara satu sama lain: belon yang disuntik dan yang offscreen () fungsi dipanggil untuk melihat jika balon telah hilang dari skrin. Hasilnya ialah kod untuk memadamkan belon itu boleh dipanggil dan kemudiannya offscreen () fungsi dipanggil (yang berlaku seperti 30 kali sesaat). Untuk mendapatkan urutan urutan yang aneh ini offscreen () fungsi perlu diperiksa jika y nilai objek itu Tiada (null) atau tidak. Sekiranya ia Tiada maka itu bermakna objek telah dipadamkan sudah, jadi bergerak bersama, ini bukan droid yang kita cari.

Sekiranya objek masih diputar, maka periksa kedudukannya, jika ia telah pergi 50 piksel di luar skrin kemudian hapus dan alih keluar pendengar supaya offscreen () fungsi tidak akan dipanggil semula untuk objek ini. Kod untuk memastikannyaoffscreen () dipanggil setiap bingkai adalah sebahagian daripada seksyen kod seterusnya.

Seluruh premis permainan ini adalah belon baru atau bom akan terus menjatuhkan skrin. Oleh itu, kita memerlukan fungsi yang akan mewujudkan sama ada balon baru atau bom baru:

fungsi tempatan addNewBalloonOrBomb () local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) then - BOMB! bom tempatan = display.newImage ("bomb.png", startX, -300) physics.addBody (bom) bomb.enterFrame = offscreen Masa tamat: addEventListener (bom "enterFrame", bom): addEventListener ("touch" - Balon belon tempatan = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balloon) balloon.enterFrame = offscreen Masa tayang: addEventListener: addEventListener ("touch" akhir belon)

Garis pertama fungsi menentukan di mana belon akan jatuh dari pada x pesawat. Sekiranya balon atau bom selalu jatuh di tengah, itu tidak akan menjadi sangat menarik! JadistartX adalah nombor rawak antara 10 peratus dan 90 peratus lebar skrin.

Seterusnya nombor rawak dipilih antara 1 dan 5.Jika nombor adalah 1 maka bom akan jatuh. Jika ia 2, 3, 4 atau 5 maka belon akan jatuh. Ini bermakna bom akan jatuh sekitar 20 peratus dari masa itu.

Kod bom dan balon agak serupa. Mula-mula imej (sama ada bom atau balon) dipaparkan menggunakannewImage(). Ia x kedudukannya ialahstartX sementara itu y kedudukan ditetapkan ke -300, iaitu dari bahagian atas skrin. Alasannya ialah kita mahu objek jatuh dari luar kawasan skrin ke kawasan yang kelihatan dan kemudian dari bawah. Oleh kerana kita menggunakan enjin fizik 2D, adalah baik untuk memberikan objek sedikit jarak permulaan untuk jatuh, jadi ia boleh mendapat sedikit kelajuan.

Panggilan untukphysics.addBody () mengambil imej dimuatkan oleh newImage () dan menjadikannya objek dalam enjin fizik. Ini sangat kuat. Mana-mana fail imej boleh dibuat ke dalam badan yang bertindak balas terhadap graviti dan perlanggaran hanya dengan menelefonphysics.addBody ().

Tiga barisan terakhir bom atau kod belon menyiapkan pendengar. MenetapkanenterFrame hartanah memberitahu Corona yang berfungsi untuk memanggil setiap bingkai dan panggilan untukMasa tamat: addEventListener () menetapkannya. Akhir sekali panggilan untukbelon: addEventListener () memberitahu Corona yang berfungsi memanggil jika bom atau belon disentuh.

Dan kini permainan hampir selesai. Kami hanya memerlukan dua lagi baris kod:

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

Baris pertama menjadikan bom pertama atau belon jatuh dengan jelas memanggiladdNewBalloonOrBomb (). Baris kedua menetapkan pemasa yang akan memanggiladdNewBalloonOrBomb () setiap setengah saat (500 milidetik). Ini bermakna balon atau bom baru akan jatuh setiap setengah saat.

Anda kini boleh menjalankan permainan dalam emulator.

Berikut adalah senarai lengkap untuk main.lua, kod sumber projek penuh untuk permainan ini boleh didapati di sini di GitHub.

-------------------------------------------------- --------------------------------------- - - Permainan belon dan bom yang jatuh - Ditulis oleh Gary Sims untuk - ------------------------------------------- ---------------------------------------------- - Mula fizik tempatan fizik = memerlukan ("fizik") physics.start () - Kirakan separuh lebar dan ketinggian skrin halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5 - Tetapkan latar belakang bkg = display.newImage ("night_sky.png", halfW, halfH) - Skor skor = 0 scoreText = display.newText (skor, halfW, 10) - Dipanggil apabila belon ditoreh oleh pemain - Meningkatkan skor oleh 1 belon fungsi setempat acara) jika (event.phase == "bermula") kemudian Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end - bom ditoreh oleh pemain - Separuh skor sebagai penalti fungsi lokal yang dihantarkan (acara) jika (event.phase == "bermula") kemudian Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = score end end - Delete objects which have fallen off bawah skrin fungsi setempat di luar skrin (self, event) jika (self.y == nil) maka kembali jika (self.y> display.contentHeight + 50) kemudian Runtime: removeEventListener ("enterFrame" () hujung akhir - Tambah belon yang jatuh atau bom fungsi baru addNewBalloonOrBomb () - Anda boleh menemui red_ballon.png dan bom.png di repo GitHub local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) jika (math.random (1,5) == 1) maka - BOMB! bom tempatan = display.newImage ("bomb.png", startX, -300) physics.addBody (bom) bomb.enterFrame = offscreen Masa tamat: addEventListener (bom "enterFrame", bom): addEventListener ("touch" - Balon belon tempatan = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balloon) balloon.enterFrame = offscreen Masa tayang: addEventListener: addEventListener ("touch" akhir belon - Tambah balon atau bom baru sekarang addNewBalloonOrBomb () - Terus menambah belon baru atau bom setiap 0.5 saat timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Langkah seterusnya

Langkah seterusnya adalah untuk memainkan permainan pada peranti Android sebenar. Untuk membina fail .apk klik pada File-> Build for Android ... dan isikan medan. Hasilnya akan menjadi file .apk yang boleh anda salin ke peranti anda dan kemudian pasang. Anda perlu memastikan bahawa anda telah mengkonfigurasi peranti anda untuk membenarkan pemasangan apl dari sumber yang tidak diketahui. Amazon mempunyai beberapa dokumentasi yang baik mengenai ini kerana anda juga perlu menetapkan ini untuk memasang App Store Amazon. Corona juga mempunyai panduan tentang bagaimana untuk menandatangani, membina dan menguji aplikasi anda pada peranti Android.

Dengan permainan yang berjaya dipasang pada peranti anda perkara seterusnya yang perlu dilakukan adalah memperbaiki permainan. Sebagai contoh, kenapa tidak cuba menambah bunyi "pop" atau "bang" semua balon atau bom dipetik. Corona mempunyai API untuk itu:media.playEventSound ().

Atau mengapa tidak cuba menambah jenis ketiga objek, katakan rangsangan super yang menggandakan skor semasa, atau bagaimana dengan beberapa muzik latar belakang?

Wrap-up

Menulis permainan dengan Corona agak lurus ke hadapan kerana SDK mengendalikan perkara seperti OpenGL dan ia termasuk enjin fizik 2D terbina dalam. Juga Lua mudah dipelajari dan tidak sepatutnya sulit untuk sesiapa pun walaupun pengalaman minimum pengaturcaraan. Laman web Coronalabs mempunyai banyak dokumentasi termasuk banyak panduan dan tutorial.

Dalam kurang daripada 100 baris kod kami mempunyai permainan yang berfungsi. OK, ia tidak akan memenangi sebarang hadiah, namun ia menunjukkan kuasa dan fleksibiliti SDK Corona.

Bola keranjang adalah alah atu ukan paling popular di dunia. Ia mempunyai banyak pemain yang luar biaa, dekat dengan tindakan berteruan, dan beberapa detik terbaik dalam emua ukan. Malangnya, pujian ...

Batman adalah alah eorang wira DC paling popular. Anda mungkin membaca komik, menonton rancangan, atau melihat alah atu filem ekurang-kurangnya. Ternyata, ada beberapa permainan Batman bergerak di lu...

Kami Menasihati