Flash Sale! Up to 40% off on unlimited courses, tutorials and creative asset downloads Up to 40% off on unlimited assets SAVE NOW
Advertisement
  1. Game Development
  2. Complete Games
Gamedevelopment

Membuat Megaman-Inspirasi Game dalam Construk 2

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Seurion (you can also view the original English article)

Saya akan memandu anda melalui penciptaan permainan penembak/platformer yang diilhamkan oleh Megaman. Kami akan lebih menumpukan kepada aspek permainan menembak daripada permainan. Dalam tutorial ini saya akan menggunakan Construct 2 sebagai alat untuk membuat permainan, tetapi saya akan menjelaskan logik menggunakan pseudocode supaya anda boleh mengikuti tutorial ini dalam bahasa atau enjin pilihan anda.


Klik permainan untuk memberi tumpuan, kemudian gunakan kekunci anak panah untuk bergerak dan melompat, dan Z untuk menembak.

Untuk memberi tumpuan kepada pelaksanaan permainan, saya tidak akan menerangkan setiap ciri Membina 2; Saya akan menganggap bahawa anda mengetahui asas-asas seperti memuat sprit, perlanggaran asas, atau bermain bunyi. Dengan itu, mari kita mulakan permainan.


Sediakan karya seni

Pertama-tama, kita perlu mempunyai sprite untuk permainan kami. Syukurlah, opengameart telah mengaburi koleksi seni permainan undang-undang mereka yang indah. Kami memerlukan empat set sprite; satu pahlawan, satu musuh, dan jubin untuk platform.

Untuk menggunakannya dalam Membina 2, saya memangkas sprite pahlawan ke dalam bingkai individu menggunakan GIMP.


Pergerakan Asas

Saya akan menggunakan tingkah laku platform Construct 2 untuk seluruh tutorial supaya saya boleh memberi tumpuan kepada penembakan dan bahagian AI permainan, yang merupakan fokus utama tutorial ini.

Construct 2s platform behaviour
Bina perilaku platform 2

Pergerakan Asas Dijelaskan

Jika anda bekerja dalam bahasa lain, atau ingin melaksanakan pergerakan platform dasar anda sendiri, bukannya menggunakan tingkah laku terbina dalam. Anda hanya perlu menggunakan kod dalam bahagian ini jika anda tidak menggunakan kelakuan terbina dalam Construct 2.

Untuk memulakan, kita perlu mempertimbangkan tiga cara hero kita boleh bergerak; berjalan betul, berjalan kaki kiri, atau melompat. Setiap bingkai, kami mengemas kini simulasi permainan.

Untuk mengemas kini watak pemain, kami melaksanakan pergerakan asas seperti ini:

Saya menggunakan fungsi lain untuk melompat kerana melompat tidak hanya mengubah nilai y tetapi juga mengira graviti. Kami juga akan mempunyai fungsi yang mendengar atau tidak ada kunci yang baru dikeluarkan, untuk mengembalikan animasi wira kami ke animasi yang berdiri.

Mari kita bercakap tentang cara membuat pemain melompat. Wira itu perlu tahu sama ada dia sedang melompat atau tidak, dan juga sama ada dia sedang jatuh atau tidak. Oleh itu, kami akan mengisytiharkan dua pemboleh ubah baru: isJumping and isFalling. Secara lalai, kedua-duanya palsu, yang bermaksud wira berdiri di atas platform.

Untuk melakukan lompatan, kita harus terlebih dahulu memeriksa sama ada kedua-dua nilai itu salah, dan kemudian membuat jump itu benar.

Bagi wira untuk dapat melompat, kita memerlukan pembolehubah yang disebut jumpPower dan graviti. Nilai lalai jumpPower adalah -20 dan graviti ialah 1. Logik adalah untuk menambah nilai kuasa melompat ke kedudukan Y pahlawan dan menambah graviti untuk melompat nilai kuasa.

Kami melakukan semua ini. Mungkin ini bukan fizik graviti yang paling realistis di sana, tetapi permainan tidak perlu realistik, mereka hanya perlu dipercayai, itulah sebabnya beberapa permainan mempunyai lompatan manusia yang super dan melompat berganda. Kod di bawah tergolong dalam fungsi kemas kini.

Membina tingkah laku platform terbina dalam 2 menggambarkan kod contoh di atas, yang hanya diberikan bantuan yang bekerja dalam bahasa lain.


Melaksanakan Penangkapan

Sekarang datang bahagian menembak permainan. Dalam siri Megaman terdapat tiga jenis tembakan: tembakan normal, tembakan yang dikenakan, dan tembakan tenaga boss.

Tembakan normal adalah penjelasan diri. Tembakan yang dicaj adalah tembakan yang dikenakan terlebih dahulu sebelum dibebaskan, tembakan yang dikenakan ini datang dalam dua jenis: separuh dikenakan, dan dikenakan sepenuhnya. Serangan yang dikenakan ini lebih kuat dari tembakan normal, dengan yang terisi penuh menjadi terkuat.

Tembakan tenaga bos adalah tembakan dengan kuasa yang pemain diperoleh selepas mengalahkan setiap bos. Kerosakan adalah sama seperti biasa tetapi mereka mempunyai ciri khas yang tidak mempunyai gambar biasa.

Sekarang kita tahu jenis setiap pukulan, mari kita mula membuatnya. Mula-mula mari kita lihat logik di sebalik bagaimana kita menggunakan setiap pukulan. Di sini kita mengandaikan bahawa butang Z pada papan kekunci digunakan untuk memadamkan tembakan. Kami akan melaksanakan dua tingkah laku yang berbeza:

  • Tembakan normal: pemain menekan z dan kemudian segera melepaskannya (ketik butang). Peluru akan ditembak sekali setiap paip. Animasi akan berubah untuk menembak animasi sebelum beralih ke animasi berdiri.

  • Tembakan yang dikenakan: pemain menekan Z. Peluru biasa pertama akan ditembak. Animasi akan berubah untuk menembak sebelum beralih ke animasi berdiri. Jika Z terus ditekan maka kesan pengecasan akan ditambah di atas animasi bermain (berdiri, berjalan). Jika butang Z dilepaskan dalam masa kurang daripada 5 saat sejak pengisian pertama, maka peluru separuh dikenakan akan ditembak. Sekiranya butang Z dilepaskan selepas 5 saat, peluru yang dikenakan sepenuhnya akan ditembak.
  • Boss tenaga tembakan: wira kami mesti melengkapkan peluru yang dibeli selepas mengalahkan bos. Selepas melengkapkan, pemain akan menekan butang lain untuk menembak peluru ini. Tingkah laku peluru ini berbeza-beza, dan perlu dikodkan secara unik untuk setiap peluru.

Sekarang, mari kita mulakan kod. Kerana wira kita boleh menembak ke kiri dan kanan kita perlu tahu arah mana dia sedang menghadapi. Mari kita mengisytiharkan pemboleh ubah baru yang dipanggil menghadapi yang menyimpan nilai rentetan sama ada wira menghadap ke kiri atau kanan.

move events in construct 2
Gerakkan peristiwa dalam Membina 2

Sebelum kita menembak peluru, kita perlu melihat sifat peluru tersebut:

  • Kuasa: serangan kuasa peluru, kerosakan ia akan ditangani dengan musuh

  • Kelajuan: seberapa cepat peluru berlaku

  • Sudut: sudut menembak, menentukan arah mana peluru berlaku.

Ciri-ciri ini akan berbeza bagi setiap peluru. Secara khususnya, harta kuasa akan berbeza. Harta sudut biasanya hanya satu daripada dua nilai; sama ada peluru ditembak ke kanan atau kiri, melainkan ia adalah peluru tenaga bos yang boleh ditembak pada sudut yang unik.

Variasi tembakan akan dibincangkan kemudian sehingga sekarang saya hanya akan menutup tembakan asas. Berikut adalah sekeping kod yang menembak peluru.

add bullet behaviour to the bullets
Menambah tingkah laku peluru ke sprite bullet
shooting code spawn new bullet object
Kod penggambaran di mana kita menimbulkan objek peluru baru

Tembakan Dikenakan

Beberapa peluru boleh menjadi lebih kuat daripada yang lain. Untuk membuat tangkapan yang dibebankan kita memerlukan pembolehubah yang dinamakan chargeTime, yang akan bertambah setiap detik pemain memegang Z ke bawah, dan akan kembali ke sifar apabila peluru dipecat. Perubahan pada kod kemas kini adalah seperti berikut:

chapter 1 - add charged time
chapter 1 - shoot full charged bullet
chapter 1 - shoot half charged bullet

Watak pahlawan kami bergerak baru ke kiri, kanan, dan melompat mengikut input kami, dan juga menembak peluru, sama ada biasa, separuh dikenakan atau penuh.


Melaksanakan Musuh

Kami kini mempunyai wira yang boleh dikawal. Mari kita panggilnya Xeon demi kesederhanaan. Dia boleh melakukan beberapa gerakan asas seperti berjalan, melompat, dan menembak. Itu hebat! Tetapi apa gunanya keupayaan untuk menembak tanpa sesuatu untuk menembak, betul? Itulah sebabnya kali ini kita akan membuat musuh pertama kita.

Mari kita bentuk atribut musuh kita sebelum kita mula mengodnya.

  • Kesihatan: Berapa banyak kesihatan musuh kita telah menentukan berapa banyak tembakan (dan apa jenis) yang diperlukan untuk memusnahkannya.

  • Kuasa: Kuasa serangan musuh, berapa banyak kerosakan yang berlaku kepada pemain kami.

  • ShotAngle: ke arah mana musuh menembak peluru, ia boleh kiri atau kanan atau di mana sahaja yang kita mahu.

Itu cukup banyak yang kita perlukan untuk musuh kita, sekarang mari kita buat kelas / objek musuh.

Kelas/objek Enemy hampir sama dengan kelas/objek pemain, kecuali musuh tidak mendengar input pemain. Kerana itu kita perlu mengganti bahagian-bahagian di mana wira mendengar input pemain, untuk musuh AI/logik.


Enemy Attack AI

Sebagai permulaan, mari kita mengendalikan AI menembak asas musuh. Musuh akan menembak pemain ketika melihat pemain.

Untuk menentukan sama ada musuh "melihat" pemain, kita perlu menentukan pembolehubah untuk objek musuh yang disebut menghadap yang merupakan rentetan yang menyimpan salah satu daripada dua nilai, "kiri" atau "kanan".

Musuh juga memerlukan beberapa jenis penglihatan, itulah sebabnya kita akan membuat pembolehubah lain yang dipanggil julat. Jika pemain berada dalam julat ini maka itu bermakna musuh "melihat" pemain. Pseudocode adalah seperti berikut:

checkSees function

fungsi checkSees ()

Mungkin anda telah melihat sesuatu dalam pseudocode ini: ia tidak menganggap kedudukan wira itu, sehingga musuh masih akan menembak pada pahlawan walaupun mereka berada di platform dengan ketinggian yang berbeza.

Buat masa ini ini cukup, kerana membuat algoritma penglihatan adalah di luar skop tutorial ini. Dalam permainan anda sendiri, anda mungkin mahu menambah toleransi Y dalam fungsi tersebut di atas yang akan memeriksa sama ada kedudukan yudis berada di antara dua titik yang menentukan ketinggian musuh.


Membuat Tembak Musuh

Pseudocode untuk menembak musuh adalah seperti berikut:

Seperti yang anda lihat, fungsi menembak musuh () adalah sama dengan pemain. Ia mengambil laluan sprite, menyerang kuasa, kelajuan peluru, dan sudut penangkapan sebagai parameter.


Gerakan Enemy AI

Bilakah matlamat musuh dari menghadap ke kiri menghadap ke kanan? Untuk wira kami, kami menggunakan input pemain untuk mengubah arah wira kami. Untuk musuh kita, kita mempunyai dua pilihan: menggunakan beberapa jenis pemasa untuk bertukar menghadap ke arah setiap beberapa saat sambil mempunyai musuh untuk berdiri diam, atau musuh untuk berjalan ke tempat tertentu dan kemudian beralih arah menghadapnya dan kemudian berjalan ke tempat lain untuk menukar arah menghadapinya lagi.

Kaedah kedua ini boleh digunakan sebagai rantaian AI. Sudah tentu, kita hanya boleh membuat musuh berjalan dalam satu arah dan tidak pernah berpaling.

Pseudokod untuk kaedah pertama adalah seperti berikut:

switching AI function
Menukar fungsi AI

Peronda Patuhi AI

Untuk membuat rondaan AI, kita perlu membuat dua objek yang tidak kelihatan yang berada di hujung kedua-dua cara laluan rondaan musuh, dan membuat musuh bergerak dengan cara yang lain jika ia bertembung dengan mereka.

this is how it looks in Construct 2
Mengawal AI

Sekarang mari kita tulis pseudocode kami untuk rondaan AI musuh:

chapter 2 - patrolling AI

Selepas ini, musuh akan meronda antara dua mata seperti yang kita mahu.

Untuk menetapkan AI musuh yang digunakan, kami akan menambahkan satu lagi pemboleh ubah dengan jenis rentetan untuk musuh kami: musuh AI. Ini akan menentukan AI untuk menggunakan setiap bingkai, seperti:

Sudah tentu anda boleh menambah lebih banyak jenis AI musuh jika anda mahu.


Shot Variasi

Mari kita lanjut mengenai bagaimana kita boleh membuat variasi tembakan untuk kedua-dua pemain dan musuh. Kami membuat variasi tontonan dengan mengubah dua perkara: sudut tangkapan, dan bilangan pukulan peluru.

Dengan cara ini kita boleh membuat satu pukulan peluru yang mudah, atau tiga pukulan peluru arah. Sebelum kita melakukan ini, kita akan membuat pembolehubah lain untuk objek musuh/kelas bernama shotAI, yang merupakan rentetan. Kami akan menggunakan ini di checkSees () kami menyemak jika blok, di mana pucuk musuh. Perubahan pada blok kod itu akan seperti ini:

chapter 2 - enemy shooting

Sudah tentu, nama AI dan jenis tembakan yang akan dibakar oleh musuh akan terpulang kepada anda, contohnya.

Sekarang, mari tanya lebih mendalam apa yang ada di dalam fungsi shootThreeBullets ().

Jika anda tidak pasti mengapa 0 pergi ke kanan dan 180 pergi ke kiri, itu kerana arah 0 darjah terus ke sebelah kanan skrin, 90 darjah pergi ke sisi bawah skrin, dan sebagainya sehingga ia memukul 360 darjah. Sebaik sahaja anda tahu nilai yang pergi ke mana, anda boleh membuat variasi tembakan anda sendiri.

Kita juga boleh membuat pembolehubah shotAI untuk pemain, tetapi saya lebih suka kita namakan ia dipilihShot, kerana pemain kami akan memilih peluru daripada diprogramkan dari awal. T

dia logik di megaman adalah setiap kali megaman mengalahkan bos, dia mendapat kuasa bos itu sebagai pukulan baru. Saya akan cuba mencipta semula logik itu. Untuk melakukan ini, kita memerlukan array yang mengandungi pukulan pemain, termasuk pukulan normal. Pseudocode seperti ini:

two new variables

Kita perlu menjejaki dua pemboleh ubah baru:

how to add an array to construct 2
Bagaimana untuk menambah array dalam Membina 2
chapter 2 - function change bullet

Kami akan menolak elemen baru untuk shotArr apabila pemain mengalahkan bos.


Meningkatkan Peluru Pemain

Sama seperti tembakan musuhThreeBullet (), anda boleh menjadi kreatif dan membuat variasi tembakan anda sendiri. Oleh kerana ini peluru wira, mari kita beri sesuatu yang istimewa.

Mari buat satu jenis tembakan untuk menjadi berkesan terhadap bos tertentu, supaya ia lebih banyak kerosakan. Untuk melakukan ini, kami akan membuat pemboleh ubah untuk objek peluru yang dinamakan strongAgainst iaitu pemboleh ubah jenis rentetan lain yang mengandungi nama bos yang peluru ini berkesan terhadapnya. Kami akan menambah tawaran ini lebih banyak fungsi kerosakan apabila kita membincangkan bahagian bos permainan.


Kesihatan dan Kematian

Di sinilah semua variasi tembakan yang kita buat benar-benar bermula. Di sinilah kerosakan pahlawan kita dan membunuh musuh, dan sebaliknya.

Untuk memulakan, mari membuat pemboleh ubah untuk kedua-dua objek wira dan musuh, bernama kesihatan yang merupakan int, dan pembolehubah lain hanya untuk wira bernama nyawa. Mari kita lihat pseudocode:

Kami akan membuat pseudocode yang sama untuk merosakkan musuh, seperti:

bullet collides with player and enemy
Mengendalikan perlanggaran peluru antara pemain dan musuh

GUI Bar Kesihatan

Sekarang, jika saya meninggalkannya pada itu maka ia tidak akan menarik. Jadi saya akan membuat sprit segiempat di sudut kiri atas skrin yang bertindak sebagai bar kesihatan wira kami.

Panjang bar kesihatan ini akan berubah bergantung pada kesihatan semasa wira kami. Formula untuk menukar panjang bar kesihatan ialah:

chapter 2 - health bar

Kami memerlukan satu lagi pemboleh ubah untuk wira kami yang dinamakan maxHealth; nilai kesihatan penuh wira kami. Buat masa ini nilai ini tidak boleh diubah tetapi mungkin di masa depan kita boleh membuat item yang meningkatkan jumlah maksima wira.


Buat Dunia Permainan

Sekarang kita telah mencipta variasi hero, musuh, dan pukulan kita, kita perlu membuat pelbagai peringkat dan bos.

Untuk mempunyai banyak peringkat berarti bahawa pada suatu ketika dalam permainan pemain akan mencapai satu atau lebih pos pemeriksaan yang menukar permainan dari level 1-1 ke level 1-2 ke level 1-3 dan sebagainya hingga mereka mencapai bos.

Apabila pemain mati di mana-mana peringkat 1-2, dia tidak perlu memainkan kembali dari awal tahap 1-1. Bagaimanakah saya melakukan ini? Mula-mula kita akan membuat tahap, saya tidak akan menjelaskan banyak mengenai tahap merancang, tetapi di sini adalah tahap contoh dalam Membina 2.

sample level design
reka bentuk tahap sampel

Imej di sudut kiri atas adalah lapisan HUD. Ia akan tatal, mengikut wira apabila permainan dimainkan.


Pintu dan Tempat Pemeriksaan

Satu sprite yang perlu anda perhatikan adalah sprit hijau di bahagian kanan atas tahap. Ia adalah pusat pemeriksaan di tahap ini apabila wira bertabrakan dengannya kami akan memindahkan permainan ke tahap 1-2.

Untuk mengendalikan pelbagai peringkat, kita memerlukan tiga pembolehubah: currentLevel, levelName, dan nextLevel.

Pembolehubah currentLevel dibuat dalam objek / kelas hero. LevelName dibuat dalam objek tempat kejadian (tahap) permainan untuk setiap peringkat. Pemboleh ubah seterusnya akan diwujudkan dalam objek sprit hijau.

Logik adalah seperti berikut: apabila pahlawan bertembung dengan sprit hijau (saya memanggilnya greenDoor), kami akan mengubah tahap kami ke tempat kejadian di mana levelName adalah sama dengan pembolehubah seterusnya. Selepas kita mengubah tahap, kita akan mengubah nilai pembolehubah semasa wira dengan tahap yang sama seperti levelName. Inilah pseudocode:

change level when touches green door
Tukar tahap apabila kita menyentuh pintu hijau

Memulakan Tahap Baru

Ini adalah pseudocode untuk berurusan dengan apabila tahap seterusnya dimuatkan dan bersedia untuk dimainkan.

chapter 3 - start of layout

Kedudukan Mula Pemain

Sekarang kita telah berubah ke tahap yang baru saya akan menerangkan sprite oren di belakang wira kita dalam imej reka bentuk tahap di atas. Sprit oren adalah objek yang saya panggil startPos. Ia digunakan untuk menandakan kedudukan permulaan setiap peringkat.

Kami merujuk kepada objek ini apabila wira hanya mengubah tahap atau mati, sehingga kita tahu di mana untuk menelurkannya.

Berikut adalah pseudokod untuk pengendalian apabila wira mati:

Sekarang kita boleh mempunyai pelbagai peringkat dan kita juga boleh memberi respon kepada wira selepas dia mati.

Anda boleh membuat seberapa banyak tahap yang anda mahu, atau mungkin juga membuat dua objek hijau di tahap yang salah satu daripada mereka kembali ke tahap 1-1 jika pemain menyelesaikan teka-teki dengan cara yang salah.


Boss Battles

Akhirnya masa untuk melaksanakan bos itu sendiri. Untuk menjadikan tahap bos semudah membuat tahap lain yang akan menimbulkan bos bukan sebagai musuh biasa.

Bahagian yang sukar adalah membuat AI untuk bos kerana setiap bos akan mempunyai AI yang unik. Oleh itu untuk memudahkan difahami dan menduplikasi banyak bos, saya akan menjadikan bos AI bergantung pada masa selepas mereka dihasilkan. Yang bermaksud mereka akan melakukan A untuk x saat, kemudian berubah ke B untuk y saat kemudian melakukan C untuk z detik sebelum kembali ke A. Pseudocode akan terlihat seperti ini:

chapter 3 - boss AI

Takrif dari boss functons ditembak adalah di bawah. Jangan ragu untuk mengubahnya mengikut apa yang anda mahu untuk melawan bos:

Terpulang kepada anda untuk menambah variasi tembakan kepada rutin bos. Pembolehubah yang digunakan oleh objek musuh bos sama dengan objek musuh, kecuali bahawa bos tidak menggunakan musuhAI dan menembak pembolehubah, kerana kedua-duanya akan ditangani dalam blok jika di atas bergantung pada masa berlalu.

Musuh bos juga mempunyai pemboleh ubah yang objek musuh tidak. Ia dipanggil rewardShot, yang merupakan rentetan. Pembolehubah ini memegang nama pukulan bos yang pemain akan memperoleh setelah mengalahkan bos (yang dalam pemboleh ubah array shotArr).

Ini akan membolehkan pemain untuk 'belajar' serangan bos seperti yang dijelaskan sebelum ini. Untuk menambah jenis pukulan ini kepada pelbagai tangkapan pemain, kami perlu menambah kod berikut selepas musuh mati:

Untuk melaksanakan jenis peluru tambahan untuk pemain anda nikmati, semua yang perlu anda lakukan ialah menambah kod yang sesuai untuk setiap ganjaran yang anda buat, seperti yang telah kami lakukan sebelumnya.


Tahniah!

Anda telah menyelesaikan tutorial saya tentang cara membuat permainan metroidvania seperti megaman Megaman dalam Membina 2. Selebihnya hanya membina permainan anda berdasarkan apa yang telah anda pelajari di sini untuk menjadikannya sendiri. Tambah lebih banyak jenis musuh, lebih banyak tahap, kuasa dan banyak lagi. Nasib baik dan bersenang-senang.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.