Menulis game Android pertama Anda menggunakan Corona SDK

Pengarang: Randy Alexander
Tanggal Pembuatan: 1 April 2021
Tanggal Pembaruan: 26 Juni 2024
Anonim
Writing your first Android game using the Corona SDK!
Video: Writing your first Android game using the Corona SDK!

Isi


Kategori yang paling populer di Google Play Store selalu adalah Games. Meskipun kita semua mungkin menggunakan aplikasi produktivitas utama seperti browser web, klien email, dan aplikasi perpesanan instan, game tetap menjadi bagian penting dari pengalaman seluler. Jadi tidak mengherankan bahwa banyak orang yang ingin belajar mengembangkan untuk Android ingin memulai dengan membuat game. Selain itu, jujur ​​saja, menulis game jauh lebih menyenangkan daripada mengembangkan aplikasi produktivitas!

Bahasa resmi Android adalah Java dan lingkungan pengembangan resmi adalah Android Studio. Jika Anda ingin melihat ke Jawa maka saya sarankan tutorial dasar-dasar Java kami, dan jika Anda ingin belajar cara menulis aplikasi menggunakan Android Studio maka saya sarankan Anda memeriksa tutorial kami tentang menulis aplikasi Android pertama Anda. Namun Java dan Android studio bukan satu-satunya cara untuk mengembangkan untuk Android. Anda dapat menemukan ikhtisar bahasa dan SDK yang tersedia di panduan kami: Saya ingin mengembangkan Aplikasi Android - Bahasa apa yang harus saya pelajari?


Salah satu SDK yang disebutkan dalam panduan bahasa pemrograman adalah Corona, SDK pihak ketiga yang dirancang terutama untuk menulis game. Alih-alih Jawa, Corona menggunakan Lua, bahasa scripting cepat yang mudah dipelajari namun kuat. Namun, Corona bukan satu-satunya SDK game seluler yang menggunakan Lua, contoh terkenal lainnya termasuk Cocos2d-X, Marmalade, dan Gideros.

Unduh dan pasang

Untuk memulai dengan Corona Anda harus mengunduh dan menginstal SDK. Buka situs web Corona dan tekan tombol unduh. Anda harus membuat akun (yang gratis) sebelum dapat mengunduh kit. Jika Anda ingin membuat file .apk yang sebenarnya daripada hanya menjalankan program Anda di emulator, Anda harus menginstal Java 7, namun Anda tidak perlu menginstal Android SDK. Untuk menginstal Java 7 Development Kit, buka situs web Oracle, lihat bagian yang disebut “Java SE Development Kit 7u79 ″ dan unduh versi untuk PC Anda.


Setelah Anda menginstal Corona, Anda harus mengaktifkannya. Ini adalah proses satu kali, yang gratis. Mulai Simulator Corona dan setujui lisensi. Masukkan alamat email dan kata sandi yang Anda gunakan untuk mengunduh, dan klik Login.

Memulai proyek

Dari dalam Simulator Corona klik “Proyek Baru.” Masukkan nama untuk aplikasi Anda di bidang “Nama Aplikasi:” dan biarkan pengaturan lainnya pada pengaturan default. Klik "OK."

Tiga jendela sekarang akan muncul. Dua yang pertama adalah Corona Simulator dan Corona Simular Output. Corona juga akan membuka jendela file explorer yang menunjukkan file untuk proyek Anda.

Sebagian besar file (sekitar 23 di antaranya) dalam direktori proyek adalah untuk ikon aplikasi! File yang paling penting bagi kami saat ini adalah main.lua, karena di sinilah kami akan menulis kode untuk aplikasi kami.

Pengantar Lua

Sebelum kita mulai menulis kodenya, kita perlu melakukan tur ke Lua. Penerjemah Lua (ingat ini adalah bahasa scripting, bukan bahasa yang dikompilasi) tersedia untuk Windows, OS X, dan Linux. Namun itu bawaan untuk Corona, jadi saat ini Anda tidak perlu menginstal apa pun tambahan. Cara termudah untuk bermain dengan Lua adalah dengan menggunakan demo langsung online.

Anda dapat menemukan banyak tutorial bagus tentang Lua online dan Anda harus melihat pada Manual Referensi Lua, Pemrograman dalam Lua, The.Lua.Tutorial, dan The Tutorials Point Lua Tutorial.

Berikut ini adalah program Lua kecil yang akan menunjukkan kepada Anda beberapa fitur utama Lua:

fungsi lokal doubleIt (x) mengembalikan x * 2 end untuk i = 1,10,1 do x = doubleIt (i) jika (x == 10) kemudian mencetak ("sepuluh") lalu mencetak (doubleIt (i)) end end

Kode di atas menunjukkan tiga konstruksi Lua penting: fungsi, loop, dan pernyataan if. Fungsinya doubleIt () sangat sederhana, itu hanya menggandakan parameter yang dikirimkan x.

Kode utamanya adalah a untuk loop dari 1 hingga 10. Itu panggilan doubleIt () untuk setiap iterasi. Jika nilai kembali adalah 10 (mis. Kapan saya adalah 5) maka kode tersebut mencetak "sepuluh" jika tidak hanya mencetak hasil doubleIt ().

Jika Anda memiliki pengalaman pengkodean maka kode contoh harus cukup mudah untuk diikuti. Jika Anda ingin belajar pemrograman dasar maka saya sarankan Anda menggunakan beberapa sumber daya yang terhubung di atas untuk mengasah keterampilan Anda.

Menulis game

Menulis program dasar di Corona itu sederhana. Anda hanya perlu khawatir sendiri dengan satu file, main.lua, dan biarkan Corona melakukan semua pekerjaan berat. Gim yang akan kita tulis adalah gim "ketuk" yang sederhana. Balon atau bom akan gagal di layar. Jika pemain mengetuk balon, mereka mencetak poin, mereka mengetuk bom, maka skor akan dibagi 2, sebagai penalti. Untuk menulis kode yang perlu Anda edit main.lua. Anda dapat melakukan ini di editor teks apa pun.

The Corona SDK memiliki mesin fisika 2D bawaan, yang membuat pembuatan game sangat mudah. Langkah pertama dalam menulis game adalah menginisialisasi mesin fisika:

fisika lokal = membutuhkan ("fisika") physics.start ()

Kode ini cukup jelas. Fisika modul dimuat dan diinisialisasi, ditugaskan ke variabel fisika. Untuk mengaktifkan mesinphysics.start () disebut.

Selanjutnya kita membuat beberapa variabel bermanfaat yang akan berguna tidak hanya untuk game sederhana ini, tetapi juga untuk game yang lebih kompleks. setengah dan setengah tahan nilai untuk setengah dari lebar layar dan setengah dari tinggi layar:

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

Itu tampilan objek adalah objek yang ditentukan sebelumnya yang disediakan Corona secara global.

Sekarang tiba langkah pertama yang benar-benar membuat sesuatu terjadi di layar:

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

Serta sifat suka kontenTinggi dan contentWidth, itu tampilan objek juga memiliki banyak fungsi yang bermanfaat. Itu gambar baru() fungsi membaca file gambar (dalam hal ini a .png) dan menampilkannya di layar. Obyek tampilan dirender berlapis-lapis, jadi karena ini adalah gambar pertama yang kita letakkan di layar maka itu akan selalu menjadi latar belakang (kecuali kode secara eksplisit melakukan sesuatu untuk mengubah itu). Parameternya setengah dan setengah beri tahu Corona untuk menempatkan gambar di tengah.

Pada titik ini Anda dapat menjalankan kode di emulator dan melihat gambar latar belakang. Jika Anda menyimpan file maka emulator akan melihat bahwa file telah berubah dan menawarkan untuk diluncurkan kembali. Jika itu tidak terjadi maka gunakan File-> Luncurkan Ulang.

Karena pengguna akan mencetak poin untuk mengetuk balon, kita perlu menginisialisasi variabel skor dan menampilkan skor di layar:

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

Skor akan disimpan dalam variabel yang diberi nama imajinatif skor,dan scoreText adalah objek yang menampilkan skor. Seperti gambar baru(), newText () letakkan sesuatu di layar, dalam teks kasus ini. Sejak scoreText adalah variabel global maka kita dapat mengubah teksnya kapan saja. Tapi kita akan segera melakukannya.

Anda dapat meluncurkan kembali emulator dan melihat skor 0 display di bagian atas layar.

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

Sekarang hadir sesuatu yang sedikit lebih rumit, tetapi jangan khawatir saya akan menjelaskannya baris demi baris:

fungsi lokal balloonTouched (event) if (event.phase == "dimulai") lalu Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () skor = skor + 1 scoreText.text = skor akhir akhir

Kode di atas mendefinisikan fungsi yang disebut balloonTouched () yang akan dipanggil setiap kali balon diketuk. Kami belum memberi tahu Corona untuk memanggil fungsi ini setiap kali balon diketuk, yang akan datang kemudian, tetapi ketika kami melakukan ini adalah fungsi yang dipanggil.

Ketuk atau sentuh acara memiliki beberapa tahap, banyak untuk mendukung penyeret. Pengguna meletakkan jari mereka pada suatu objek, ini adalah fase "dimulai". Jika mereka menggeser jari mereka ke segala arah, itu adalah fase "pindah". Ketika pengguna mengangkat jari mereka dari layar, itu adalah fase "berakhir".

Baris pertama balloonTouched () memeriksa kita berada dalam fase "mulai". Kami ingin menghapus balon dan meningkatkan skor secepat mungkin. Jika fungsi dipanggil lagi untuk fase lain seperti "berakhir" maka fungsi tidak melakukan apa pun.

Di dalamjika pernyataan adalah empat baris kode. Mari kita berurusan dengan dua yang terakhir lebih dulu, karena mereka lebih sederhana.skor = skor +1 hanya menambah skor dengan satu danscoreText.text = skor mengubah teks skor di layar untuk mencerminkan skor baru. Ingat bagaimana saya mengatakan ituscoreText bersifat global dan dapat diakses di mana saja, nah itulah yang kami lakukan di sini.

Sekarang untuk dua baris pertama. Setelah balon atau bom jatuh dari bagian bawah layar itu masih ada di memori aplikasi, hanya saja Anda tidak dapat melihatnya. Seiring permainan berlangsung, jumlah objek di luar layar ini akan terus meningkat. Oleh karena itu kita perlu memiliki mekanisme yang menghapus objek begitu mereka tidak terlihat. Kami melakukan itu dalam suatu fungsi yang disebutrahasia, yang belum kami tulis. Fungsi itu akan dipanggil satu kali per frame selama game. Setelah balon diketuk maka kita perlu menghapusnya dan menghapus panggilan yang memeriksa apakah balon sudah lepas layar.

Garisevent.target:removeSelf () menghapus balon. Ketika peristiwa sentuhan terjadi, salah satu parameter fungsi pendengar adalahperistiwa parameter. Ini memberi tahu fungsi tentang acara dan jenis acara apa itu, mis.event.phase. Itu juga memberitahu kita balon mana yang disadap,event.target. IturemoveSelf () fungsi melakukan apa yang dikatakannya, itu menghapus objek (dalam hal ini balon).

Baris sebelum itu menghilangkan pendengar "enterframe", yang merupakan fungsi yang disebut setiap frame untuk melihat apakah balon telah jatuh dari bagian bawah layar. Kita akan melihat itu secara lebih rinci ketika kita datang untuk menulisrahasia fungsi pendengar.

Jadi, untuk rekap.balloonTouched ()memeriksa apakah ini adalah awal dari urutan sentuh. Kemudian menghapus pendengar "enterframe", yang merupakan fungsi yang disebut setiap frame untuk melihat apakah balon telah jatuh dari bagian bawah layar. Itu kemudian menghapus balon, menambah skor dan menampilkan skor baru.

Itu untuk balon, sekarang kita membutuhkan sesuatu yang serupa untuk bom:

fungsi lokal bombTouched (event) if (event.phase == "dimulai") lalu Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () skor = math.floor (skor * 0,5) scoreText.text = skor akhir

Seperti yang Anda lihat kode sangat mirip dengan pengecualian bahwa alih-alih menambah skor, skor dikalikan dengan 0,5 (yaitu dibagi 2). Itu math.floor () fungsi membulatkan skor ke bilangan bulat terdekat. Jadi, jika pemain memiliki skor 3 dan mengetuk bom maka skor baru akan menjadi 1, dan bukan 1,5.

Saya menyebutkan rahasia() berfungsi lebih awal. Fungsi ini akan dipanggil setiap frame untuk memeriksa apakah suatu objek telah mati layar. Ini kodenya:

offscreen fungsi lokal (self, event) if (self.y == nil) lalu kembalikan end jika (self.y> display.contentHeight + 50) lalu Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Dalam komputasi ada situasi yang dikenal sebagai kondisi balapan. Di sinilah dua hal akan terjadi tetapi satu mungkin terjadi lebih dulu, atau kadang-kadang yang lain terjadi lebih dulu. Itu adalah sebuah ras. Beberapa kondisi balapan tidak terlihat karena satu hal tampaknya selalu terjadi terlebih dahulu, tetapi mereka dapat menyebabkan bug yang menarik di suatu hari, dalam kondisi yang tepat, hal lain terjadi terlebih dahulu dan kemudian sistem rusak!

Ada kondisi lomba dalam permainan sederhana ini karena dua hal dapat terjadi sangat dekat satu sama lain: balon disadap dan rahasia() fungsi dipanggil untuk melihat apakah balon sudah mati layar. Hasilnya adalah bahwa kode untuk menghapus balon dapat dipanggil dan kemudian rahasia() fungsi disebut (yang terjadi seperti 30 kali per detik). Untuk menyiasati urutan kejadian yang aneh ini rahasia() fungsi perlu memeriksa apakah y nilai objek adalah nol (nol) atau tidak. Jika memang nol maka itu berarti bahwa objek telah dihapus, jadi teruskanlah, ini bukan droid yang kita cari.

Jika objek masih dalam permainan, maka periksa posisinya, jika sudah 50 piksel dari layar kemudian hapus dan hapus pendengar sehingga rahasia() fungsi tidak akan dipanggil lagi untuk objek ini. Kode untuk memastikan iturahasia() disebut setiap frame adalah bagian dari kode bagian selanjutnya.

Seluruh premis dari game ini adalah bahwa balon atau bom baru akan terus jatuh ke bawah layar. Karenanya kita memerlukan fungsi yang akan membuat balon baru atau bom baru:

fungsi lokal addNewBalloonOrBomb () startX lokal = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) lalu - BOM! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offroad Runtime: bom addEventListener ("enterFrame", bom): addEventListener ("touch", bombTouched) lain - Balon balon lokal = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balon) balloon.enterFrame = offscreen Runtime: balon addEventListener ("enterFrame", balon): addEventListener ("touch", balloonTouched) end end

Baris pertama dari fungsi menentukan di mana balon akan jatuh dari pada x pesawat. Jika balon atau bom selalu jatuh di tengah, itu tidak akan sangat menarik! BegitustartX adalah angka acak antara 10 persen dan 90 persen dari lebar layar.

Selanjutnya nomor acak diambil antara 1 dan 5.Jika angkanya 1 maka sebuah bom akan dijatuhkan. Jika 2, 3, 4 atau 5 maka balon akan jatuh. Ini berarti bahwa bom akan dijatuhkan sekitar 20 persen dari waktu.

Kode bom dan balon sangat mirip. Pertama gambar (baik bom atau balon) ditampilkan menggunakangambar baru(). Nya x Posisi adalah bahwastartX sementara itu y posisi diatur ke -300, mis. dari atas layar. Alasan untuk itu adalah bahwa kita ingin objek jatuh dari luar area layar ke area yang terlihat dan kemudian dari bawah. Karena kita menggunakan mesin fisika 2D, ada baiknya untuk memberikan objek sedikit jarak awal untuk jatuh, sehingga dapat memperoleh beberapa kecepatan.

Panggilan kephysics.addBody () mengambil gambar dengan memuat gambar baru() dan mengubahnya menjadi objek di mesin fisika. Ini sangat kuat. File gambar apa pun dapat dibuat menjadi benda yang merespons gravitasi dan benturan hanya dengan meneleponphysics.addBody ().

Tiga baris terakhir bom atau kode balon mengatur pendengar. PengaturanenterFrame properti memberitahu Corona yang berfungsi untuk memanggil setiap frame dan panggilan keRuntime: addEventListener () mengaturnya. Terakhir panggilan kebalon: addEventListener () memberitahu Corona yang berfungsi memanggil jika bom atau balon disentuh.

Dan sekarang gim ini hampir selesai. Kami hanya perlu dua baris kode lagi:

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

Baris pertama membuat bom atau balon pertama jatuh dengan memanggil secara eksplisitaddNewBalloonOrBomb (). Baris kedua mengatur timer yang akan memanggiladdNewBalloonOrBomb () setiap setengah detik (500 milidetik). Ini berarti bahwa balon atau bom baru akan jatuh setiap setengah detik.

Anda sekarang dapat menjalankan gim di emulator.

Berikut adalah daftar lengkap untuk main.lua, kode sumber proyek lengkap untuk permainan ini dapat ditemukan di sini di GitHub.

-------------------------------------------------- --------------------------------------- - - Balon jatuh dan permainan bom - Ditulis oleh Gary Sims untuk - ------------------------------------------- ---------------------------------------------- -- Memulai mesin fisika fisika lokal = membutuhkan ("fisika") physics.start () - Hitung setengah lebar layar dan tinggi setengahW = display.contentWidth * 0,5 halfH = display.contentHeight * 0,5 - Tetapkan latar belakang bkg lokal = display.newImage ("night_sky.png", halfW, halfH) - Skor skor = 0 scoreText = display.newText (score, halfW, 10) - Dipanggil saat balon diketuk oleh pemain - Tingkatkan skor dengan 1 balon fungsi lokalTouched ( event) jika (event.phase == "dimulai") maka Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () skor = skor + 1 scoreText.text = skor akhir - Dipanggil saat bom disadap oleh pemain - Setengah skor sebagai fungsi penalti lokal bombTouched (event) if (event.phase == "dimulai") lalu Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () skor = math.floor (skor * 0,5) scoreText.text = skor akhir akhir - Hapus objek yang jatuh dari bagian bawah layar fungsi offscreen lokal (self, event) if (self.y == nil) lalu kembalikan end if (self.y> display.contentHeight + 50) lalu Runtime: removeEventListener ("enterFrame", self) self: removeSelf () ujung akhir - Menambahkan balon jatuh atau bom fungsi lokal addNewBalloonOrBomb () - Anda dapat menemukan red_ballon.png dan bomb.png di GitHub, repo lokal startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) lalu - BOM! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offroad Runtime: bom addEventListener ("enterFrame", bom): addEventListener ("touch", bombTouched) lain - Balon balon lokal = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balon) balloon.enterFrame = offscreen Runtime: balon addEventListener ("enterFrame", balon): addEventListener ("touch", balloonTouched) end end - Tambahkan balon atau bom baru sekarang addNewBalloonOrBomb () - Terus tambahkan balon atau bom baru setiap 0,5 detik timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Langkah selanjutnya

Langkah selanjutnya adalah memainkan game di perangkat Android nyata. Untuk membuat file .apk, klik File-> Build for Android ... dan isi kolomnya. Hasilnya akan berupa file .apk yang dapat Anda salin ke perangkat Anda dan kemudian instal. Anda harus memastikan bahwa Anda telah mengkonfigurasi perangkat Anda untuk memungkinkan pemasangan aplikasi dari sumber yang tidak dikenal. Amazon memiliki beberapa dokumentasi yang bagus tentang ini karena Anda juga perlu mengatur ini untuk menginstal Amazon Appstore. Corona juga memiliki panduan tentang cara masuk, membangun, dan menguji aplikasi Anda di perangkat Android.

Dengan game yang berhasil diinstal pada perangkat Anda, hal selanjutnya yang harus dilakukan adalah meningkatkan game. Misalnya, mengapa tidak mencoba menambahkan "pop" atau "letusan" membunyikan semua balon atau bom yang diketuk. Corona memiliki API untuk itu:media.playEventSound ().

Atau mengapa tidak mencoba menambahkan jenis objek ketiga, katakan dorongan super yang menggandakan skor saat ini, atau bagaimana dengan musik latar belakang?

Bungkus

Menulis game dengan Corona cukup mudah karena SDK menangani hal-hal seperti OpenGL dan termasuk mesin fisika 2D bawaan. Juga Lua mudah dipelajari dan tidak sulit bagi siapa pun yang memiliki pengalaman pemrograman minimum. Situs web Coronalabs memiliki banyak dokumentasi termasuk banyak panduan dan tutorial.

Dalam kurang dari 100 baris kode kami memiliki permainan yang berfungsi. OKE, itu tidak akan memenangkan hadiah apa pun, namun itu menunjukkan kekuatan dan fleksibilitas SDK Corona.

Kami telah mendengar banyak tentang layanan 5G elama beberapa tahun terakhir dan bagaimana hal itu akan mengubah dunia. Mekipun 5G tentu aja merupakan revolui dalam arti makro, bagaimana pengaruhnya t...

Mekipun T-Mobile belum mengatakan kapan akan meluncurkan jaringan 5G-nya, penginjil tekni Ookla Milan Milanović melaporkan di Twitter ebelumnya hari ini bahwa operator aat ini edang menguji 5G di New ...

Mempesona