Advertisement
  1. Game Development
  2. Complete Games

Membuat Game dengan Megaman-Inspired di Construct 2

by
Read Time:24 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Kaso Toluppa (you can also view the original English article)

Saya akan memandu Anda melalui penciptaan game shooter / platformer yang terinspirasi dari Megaman. Kita akan lebih fokus pada aspek pemotretan gameplay daripada platformnya.  Dalam tutorial ini saya akan menggunakan Construct 2 sebagai alat untuk membuat game, tapi saya akan menjelaskan logika menggunakan pseudocode sehingga Anda bisa mengikuti tutorial ini dalam bahasa atau mesin pilihan Anda.


Klik game untuk memberi fokus, lalu gunakan tombol panah untuk bergerak dan melompat, dan Z untuk menembak.

Agar fokus pada implementasi gameplay, saya tidak akan menjelaskan setiap fitur construct 2; Saya akan berasumsi bahwa Anda mengetahui dasar-dasar seperti memuat sprite, tabrakan dasar, atau pemutar suara. Dengan dasar-dasar ini, marilah mulai membuat game.


Siapkan Artwork

Hal pertama yang pertama, kita perlu memiliki sprite untuk game kita. Untungnya, opengameart  telah menyelamatkan kita dengan seni game legal mereka yang snagat hebat. Kita membutuhkan empat set sprite; satu pahlawan, satu musuh, dan ubin untuk platform. 

Untuk menggunakannya di platform Construct 2, saya memangkas sprite pahlawan ke bingkai individu menggunakan GIMP.


Gerakan Dasar

Saya akan menggunakan perilaku platform Construct 2 untuk sisa tutorial sehingga saya dapat fokus pada bagian shooting dan AI dari game, yang menjadi fokus utama dari tutorial ini.

Construct 2s platform behaviour
Platform penampilan Construct 2's 

Basic Movement Explained

Jika Anda menggunakan bahasa lain, atau ingin menerapkan platform dasar Anda dari pada menggunakan platform built-in. Anda hanya perlu menggunkan kode dalam tahapan ini jika Anda tidak ingin menggunakan platformConstruct 2's built-in.

Untuk memulianya, kita perlu untuk mempertimbangkan tiga cara untuk berpindah; berjalan ke arah kanan, berjalan ke arah kiri, ataupun melompat. Setiap frame akan diperbarui simulasi gamemya. 

Untuk memperbarui karakter pemain, kita menerapkan perpindahan dasar seperti 

Saya menggunakan fungsi lain untuk melakukan lompatan karena melompat bukan hanya masalah mengubah nilai y tapi juga menghitung gravitasi. Kami juga akan memiliki fungsi yang akan merespon apakah sebuah kunci baru saja diluncurkan, untuk mengembalikan animasi pahlawan kita menjadi animasi bertahan.

  Mari kita bicara tentang bagaimana membuat pemain melompat. Pahlawan itu perlu tahu apakah dia saat ini sedang melompat atau tidak, dan juga apakah dia saat ini jatuh atau tidak.  Jadi kita akan mendeklarasikan dua variabel baru: isJumping danisFalling. Secara default, keduanya salah, yang berarti sang pahlawan berdiri di atas panggung.

Untuk melakukan lompatan kita harus terlebih dahulu mengecek apakah kedua nilai itu salah, dan kemudian membuat kode isjump menjadi benar.

Agar sang pahlawan bisa melompat, kita butuh variabel yang disebut jumpPower dan gravity. Nilai default the jumpPower adalah -20 dan gravitasi adalah 1. Logikanya adalah menambahkan nilai daya loncat ke posisi Y pahlawan dan menambahkan gaya gravitasi untuk memberi nilai daya.

Kami melakukan ini setiap pada tahap. Mungkin ini bukan fisika gravitasi paling realistis yang ada, tapi game tidak perlu realistis, mereka hanya perlu dipercaya, karena itulah beberapa game memiliki lompatan manusia super dan lompatan ganda. Kode di bawah ini termasuk dalam fungsi pembaruan. Kode berikut termasuk dalam fungsi update.

Buatlah perilaku platform built-in 2 mereplikasi kode contoh di atas, yang hanya memberi bantuan kepada mereka yang bekerja dalam bahasa lain.


Menerapkan Penembakan

sampailah pada tahap penembakan dari sebuah game. Di seri Megaman ada tiga jenis tembakan: tembakan normal, tembakan bermuatan, dan tembakan energi tertingi.

tembakan normal cukup jelas. Charged shots adalah tembakan yang dibebankan terlebih dahulu sebelum dilepaskan, tembakan bermuatan ini datang dalam dua jenis: setengah diisi, dan terisi penuh.  Serangan bermuatan ini lebih kuat dari tembakan normal, dengan terisi penuh maka ini menjadi yang terkuat.

Tembakan energi tinggi adalah tembakan dengan kekuatan yang diperoleh pemain setelah mengalahkan masing-masing atasan. Kerusakannya sama dengan tembakan normal tapi memiliki sifat khusus yang tidak dimiliki tembakan biasa.

Sekarang kita tahu tipe masing-masing tembakan, mari kita mulai untuk membuatnya. Pertama mari kita lihat logika di balik bagaimana kita menggunakan setiap tembakan. Di sini kita asumsikan bahwa tombol Z pada keyboard digunakan untuk menembakkan tembakan. Kami akan menerapkan dua perilaku yang berbeda:

  • Sekarang kita tahu tipe masing-masing tembakan, mari kita mulai untuk membuatnya. Pertama mari kita lihat logika di balik bagaimana kita menggunakan setiap tembakan. Di sini kita asumsikan bahwa tombol Z pada keyboard digunakan untuk menembakkan tembakan. Kami akan menerapkan dua perilaku yang berbeda:

  • Tembakan bermuatan: pemain menekan Z. Peluru normal pertama akan ditembak. Animasi akan berubah menjadi penembakan sebelum segera beralih ke animasi berdiri.  Jika Z terus ditekan maka efek pengisian akan ditambahkan di atas animasi bermain (berdiri, berjalan).  ·         Jika tombol Z dilepaskan dalam waktu kurang dari 5 detik sejak pengisian pertama, maka peluru yang setengah terisi akan ditembak. Jika tombol Z dilepaskan setelah 5 detik, peluru yang terisi penuh akan ditembak.
  • Tembakan energi tinggi: pahlawan kita pertama-tama harus melengkapi peluru yang dia dapatkan setelah mengalahkan atasan. Setelah melengkapi, pemain akan menekan tombol lain untuk menembakkan peluru ini. Perilaku peluru ini bervariasi, dan perlu dikodekan secara unik untuk setiap peluru.

 Sekarang, mari kita mulai meng-kode. Karena pahlawan kita bisa menembak ke kiri dan kanan kita perlu tahu arah mana yang sedang dia hadapi. Mari kita nyatakan sebuah variabel baru yang disebut menghadap yang menyimpan nilai string apakah pahlawan itu menghadap ke kiri atau kanan.

move events in construct 2move events in construct 2move events in construct 2
Pindahkan adegan di Construct 2

Sebelum kita menembak peluru, kita perlu melihat properti yang dimiliki peluru tersebut:

  • Kekuasaan: kekuatan serangan peluru, kerusakan yang akan ditanggungnya terhadap musuh

  • Kecepatan: seberapa cepat peluru pergi

  • Sudut: sudut penembakan, menentukan arah peluru.

Properti ini akan berbeda untuk setiap peluru. Secara khusus, properti energi akan berbeda.  Sudut properti biasanya hanya satu dari dua nilai; apakah peluru itu ditembak ke kanan atau kiri, kecuali jika itu adalah peluru energi tinggi yang mungkin tertembak pada sudut yang unik.

Variasi penembakan akan dibahas nanti jadi sekarang saya hanya akan menyelesaikan penembakna dasar. Berikut ini adalah potongan kode yang dapat menembakkan peluru.

add bullet behaviour to the bullets
Tambahkan perilaku peluru pada peluru sprites  
shooting code spawn new bullet objectshooting code spawn new bullet objectshooting code spawn new bullet object
Kode pemotretan dimana kita menelurkan sebuah peluru baru

Penembakan Bermuatan

Beberapa peluru bisa lebih bertenaga dibanding yang lain. Untuk membuat tembakan bermuatan, kami memerlukan variabel bernama chargedTime, yang akan bertambah setiap detik jika pemain menahan Z turun, dan akan kembali ke nol saat peluru ditembakkkan.  Perubahan pada kode pembaruan adalah sebagai berikut:

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

Tokoh pahlawan baru kita bergerak ke kiri, kanan, dan melompat sesuai masukan kita, dan juga menembakkan peluru, apakah normal, setengah diisi, atau terisi penuh.


Menerapkan Musuh

Kita sekarang telah mengendalikan pahlawan.  Mari kita menyebutnya Xeon demi kesederhanaan.  Dia bisa melakukan beberapa gerakan dasar seperti berjalan, melompat, dan menembak. Itu hebat! Tapi apa gunanya kemampuan menembak tanpa ada yang bisa ditembak kan? Itulah mengapa kali ini kita akan membuat musuh pertama kita.

Mari desain atribut musuh kita sebelum kita mulai mengkodenya.

  •  Kesehatan: seberapa sehat musuh kita tentukan berapa banyak tembakan (dan jenisnya) yang dibutuhkan untuk menghancurkannya.

  • Kekuatan: Kekuatan serangan musuh, berapa banyak kerusakan yang terjadi pada pemain kita.

  • ShotAngle: ke arah mana musuh menembak peluru, bisa dibiarkan atau di kanan atau di mana saja yang kita inginkan.

Ada banyak hal  yang kita butuhkan untuk musuh kita, sekarang mari kita buat kelas / objek musuh.

 Kelas / objek musuh dengan kelas pemain / objek, kecuali musuh tidak mendengarkan masukan pemain. Karena itu kita perlu mengganti bagian mana pahlawan kita mendengarkan masukan pemain, untuk musuh AI / logika.


Serangan AI Musuh

Sebagai permulaan, mari kita tangani tembakan dasar AI dari musuh. Musuh akan menembak pemain saat melihat pemain.

Untuk menentukan apakah musuh "melihat 'pemain, kita perlu mendefinisikan sebuah variabel untuk objek musuh yang disebut menghadap yang merupakan string yang menyimpan satu dari dua nilai," kiri "atau" kanan ".

Musuh juga membutuhkan semacam penglihatan, itulah sebabnya mengapa kita akan membuat variabel lain yang disebut jangkauan. Jika pemain berada dalam kisaran ini maka itu berarti musuh "melihat" pemain. The pseudocode adalah sebagai berikut:

checkSees functioncheckSees functioncheckSees function

fungsi checkSees ()

Mungkin Anda telah melihat sesuatu dalam pseudocode ini: yaitu tidak mempertimbangkan posisi pahlawan, jadi musuh tetap akan menembaki pahlawan bahkan jika mereka berada di panggung dengan ketinggian yang berbeda.

  Untuk saat ini ini sudah cukup, karena membuat algoritma garis pandang ada diluar lingkup tutorial ini. Dalam permainan Anda sendiri, Anda mungkin ingin menambahkan toleransi Y pada fungsi di atas yang akan memeriksa apakah posisi pahlawan berada di antara dua titik yang menentukan ketinggian musuh.


Membuat Musuh Menembak

Pseudocode untuk penembakan yang dilakukan musuh adalah sebagai berikut:

Seperti yang bisa Anda lihat, fungsi shoot () musuh sama dengan pemain. Dibutuhkan jalur sprite, kekuatan serangan, kecepatan peluru, dan sudut penembakan sebagai parameter.


Gerakan AI Musuh 

Kapan musuh beralih dari menghadap ke kiri untuk menghadap ke kanan? Bagi pahlawan kita, kita menggunakan input pemain untuk mengubah arah wajah pahlawan kita. Bagi musuh kita, kita memiliki dua pilihan: gunakan beberapa jenis timer untuk beralih menghadap ke arah setiap beberapa detik sambil membiarkan musuh berdiri diam, atau mintalah musuh untuk berjalan ke tempat tertentu dan kemudian beralih menghadap ke arahnya dan kemudian berjalan ke tempat lain. untuk beralih menghadap ke arahnya lagi.

  Metode kedua ini bisa digunakan sebagai patroli AI. Tentu saja, kita bisa membuat musuh berjalan dalam satu arah dan tidak pernah kembali.

Metode pseudocode untuk metode pertama adalah sebagai berikut:

switching AI functionswitching AI functionswitching AI function
Fungsi beralih  AI

  Musuh Berpatroli AI

Untuk membuat AI yang patroli, kita perlu membuat dua benda tak terlihat yang berada di ujung kedua rute patroli musuh, dan membuat musuh bergerak ke arah lain jika bertabrakan dengan mereka.

this is how it looks in Construct 2this is how it looks in Construct 2this is how it looks in Construct 2
Patroli AI

Sekarang mari kita tulis pseudocode untuk AI patroli musuh:

chapter 2 - patrolling AIchapter 2 - patrolling AIchapter 2 - patrolling AI

Setelah ini, musuh akan berpatroli di antara dua titik seperti yang kita inginkan.

Untuk mengatur AI yang digunakan musuh, kita akan menambahkan satu variabel lagi dengan tipe string untuk musuh kita: AI musuh. Ini akan menentukan apa yang AI gunakan setiap frame, seperti:

Tentu Anda bisa menambahkan lebih banyak jenis AI musuh jika Anda mau.


Variasi Penembakan

Mari kita lanjutkan tentang bagaimana kita bisa membuat variasi tembakan untuk pemain dan musuh. Kami membuat variasi tembakan dengan mengubah dua hal: sudut pengambilan gambar, dan jumlah tembakan peluru.

Dengan cara ini kita bisa melakukan tembakan peluru yang sederhana, atau tembakan peluru tiga arah. Sebelum kita melakukan ini kita akan membuat variabel lain ke objek musuh / kelas bernama shotAI, yaitu sebuah string.  Kami akan menggunakan ini di checkSees kami () memeriksa apakah blok, di mana musuh akan menembak. Perubahan pada blok kode akan menjadi seperti ini:

chapter 2 - enemy shootingchapter 2 - enemy shootingchapter 2 - enemy shooting

Tentu saja, nama AI dan jenis tembakan yang akan ditembak musuh terserah Anda, ini hanyalah sebuah contoh.

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

Jika Anda tidak yakin mengapa 0 pergi ke kanan dan 180 pergi ke kiri, itu karena arah 0 derajat lurus ke sisi kanan layar, 90 derajat mengarah ke sisi bawah layar, dan seterusnya sampai ini menabrak 360 derajat. Begitu Anda tahu nilai apa yang muncul dan mengarah kemana, Anda bisa menciptakan variasi tembakan Anda sendiri.

Kita juga bisa membuat variabel shotAI untuk pemain, tapi saya lebih suka kita namai itu selectedShot, karena pemain kita akan memilih peluru bukan diprogram dari awal. 

Logika di megaman adalah setiap saat megaman mengalahkan bos, dia mendapat kekuatan bos itu sebagai tembakan baru. Saya akan mencoba menciptakan logika itu. Untuk melakukan ini, kita membutuhkan sebuah array yang berisi tembakan pemain, termasuk tembakan normal. Pseudocode seperti ini:

two new variables

 Kita perlu melacak dua variabel baru:

how to add an array to construct 2how to add an array to construct 2how to add an array to construct 2
Bagaimana cara menambahkan array pada Construct 2
chapter 2 - function change bulletchapter 2 - function change bulletchapter 2 - function change bullet

Kami akan mendorong elemen baru untuk shotArr saat pemain tersebut mengalahkan bos.


Upgrade Peluru Pemain

Sama seperti shootThreeBullet musuh (), Anda bisa menjadi kreatif dan menciptakan variasi tembakan Anda sendiri. Karena ini adalah peluru pahlawan, mari kita berikan sesuatu yang spesial.

Mari kita membuat satu jenis tembakan agar efektif melawan bos tertentu, sehingga bisa mengatasi lebih banyak kerusakan. Untuk melakukan ini, kita akan membuat sebuah variabel untuk objek peluru yang bernama strongAgainst yaitu variabel tipe string lain yang berisi nama bos bahwa peluru ini efektif melawannya.  Kami akan menambahkan penawaran ini lebih banyak fungsi kerusakan saat kita membahas bagian bos dari game.


Kesehatan dan Kematian

Di sinilah semua variasi tembakan yang kita buat benar-benar mulai menjadi masalah. Di sinilah pahlawan kita merusak dan membunuh musuh, dan sebaliknya.

Untuk memulai, mari kita membuat variabel untuk kedua pahlawan dan objek musuh, bernama kesehatan yang merupakan int, dan variabel lain untuk pahlawan yang disebut variable lives (kehidupan). Mari kita lihat pseudocode:

Kita akan membuat pseudocode yang sama untuk perusakan musuh, seperti:

bullet collides with player and enemybullet collides with player and enemybullet collides with player and enemy
Menangani tabrakan peluru antara pemain dan musuh

GUI Bar Kesehatan

Sekarang, jika saya berhenti begitu saja maka itu tidak akan menarik. Jadi saya akan membuat sprite persegi panjang di pojok kiri atas layar yang bertindak sebagai bar kesehatan pahlawan kita.

Panjang bar kesehatan ini akan berubah tergantung pada kesehatan pahlawan kita saat ini. Rumus untuk mengubah batas kesehatan bar adalah ini:

chapter 2 - health barchapter 2 - health barchapter 2 - health bar

Kita membutuhkan satu variabel lagi untuk pahlawan kita yang disebut maxHealth; nilai penuh kesehatan pahlawan kita. Untuk saat ini nilai ini tidak bisa diubah tapi mungkin di masa depan kita bisa membuat item yang meningkatkan jumlah maxHealth pahlawan.


Membuat Dunia Game

Sekarang kita telah menciptakan variasi pahlawan, musuh, dan tembakan kita, kita perlu membuat beberapa tingkatan dan bos.

Untuk memiliki beberapa tingkat berarti pada beberapa titik dalam permainan pemain akan mencapai satu atau lebih pos pemeriksaan yang mengalihkan permainan dari tingkat 1-1 ke tingkat 1-2 ke level 1-3 dan seterusnya sampai mereka mencapai bos.

Saat pemain mati di suatu tempat di level 1-2 dia tidak perlu memutar ulang semua permainan sejak awal dari level 1-1. Bagaimana saya melakukan ini?  Pertama, kita akan membuat level, saya tidak akan menjelaskan banyak tentang perancangan level, tapi inilah contoh level dalam Build 2.

sample level designsample level designsample level design
Contoh desain level

Gambar pada bagian pojok kiri atas adalah lapisan HUD. Ini akan merambat, mengikuti pahlawan ketika game dimainkan. 


Doors and Checkpoints

Satu sprite yang harus Anda perhatikan adalah sprite hijau di bagian kanan atas dari level. Ini adalah pos pemeriksaan di level ini saat pemain bertabrakan dengan itu kita akan mentransfer game ke level 1-2.

Untuk menangani beberapa tingkat, kita memerlukan tiga variabel: currentLevel, levelName, dan nextLevel.

Variabel currentLevel dibuat di objek pahlawan / kelas. LevelName dibuat di adegan game (tingkat) objek untuk setiap level. Variabel nextLevel dibuat pada objek sprite hijau.

Logikanya adalah sebagai berikut: ketika pahlawan bertabrakan dengan sprite hijau (saya menyebutnya greenDoor), kita akan mengubah level kita ke adegan game dimana variabel levelName sama dengan variabel nextLevel.  Setelah kita mengubah level, kita akan mengubah nilai variabel currentreevel pahlawan menjadi sama dengan levelame pada adegan gameName. Inilah pseudocodenya:

change level when touches green doorchange level when touches green doorchange level when touches green door
Ubah level saat kita menyentuh pintu hijau

Menginisiasi Level Baru

Berikut adalah pseudocode untuk menangani saat level berikutnya dimuat dan siap dimainkan.

chapter 3 - start of layoutchapter 3 - start of layoutchapter 3 - start of layout

Posisi Awal Pemain

Sekarang setelah kita berubah ke level yang baru, saya akan menjelaskan sprite oranye di belakang tokoh kita di gambar desain tingkat di atas. Sprite oranye itu adalah objek yang saya sebut startPos. Ini digunakan untuk menandai posisi awal setiap level.

Kami mengacu pada objek ini saat sang pahlawan baru saja berubah level atau mati, sehingga kita tahu dimana harus menelurkannya.

Inilah pseudocode untuk penanganan saat sang pahlawan mati:

Sekarang kita bisa memiliki banyak level dan kita juga bisa menelurkan ulang saat sang pahlawan telah meninggal.

Anda bisa menciptakan level sebanyak yang Anda mau, atau mungkin malah menciptakan dua objek greenDoor di level mana salah satunya kembali ke level 1-1 jika pemain memecahkan teka-teki dengan cara yang salah.


pertempuran Bos

Akhirnya saatnya menerapkanbos itu sendiri. Untuk membuat level bos sesederhana membuat level lain yang akan menelurkan bos yang bukan merupakan musuh biasa.

Bagian yang sulit adalah menciptakan AI untuk bos karena masing-masing bos akan memiliki AI yang unik. Jadi untuk memudahkan untuk memahami dan menduplikat banyak bos, saya akan membuat AI bos yang bergantung pada waktu setelah mereka melahirkan.  Yang berarti mereka akan melakukan A selama x detik, lalu ganti menjadi B selama beberapa detik kemudian lakukan C selama z detik sebelum kembali ke A. Pseudocode akan terlihat seperti ini:

chapter 3 - boss AIchapter 3 - boss AIchapter 3 - boss AI

Definisi fungsi tembakan bos ada di bawah. Jangan ragu untuk mengubahnya agar sesuai dengan apa yang Anda inginkan untuk pertarungan bos:

Terserah Anda untuk menambahkan variasi tembakan ke rutinitas bos. Variabel yang digunakan oleh objek musuh bos sama dengan objek musuh, kecuali bos yang tidak menggunakan variabel enemyAI dan shotAI, karena keduanya akan ditangani jika blok di atas tergantung pada waktu yang telah berlalu.

Boss musuh juga memiliki variabel yang objek yang tidak dimiliki musuh. Ini disebut rewardShot, yang merupakan string. Variabel ini memegang nama bos yang ditembak pemain yang akan didapat setelah mengalahkan bos (yang ada dalam variabel array shotArr).

Ini akan memungkinkan pemain untuk "belajar" serangan bos seperti yang dijelaskan sebelumnya. Untuk menambahkan jenis tembakan ini ke tangkapan tangkapan pemain, kita perlu menambahkan kode berikut setelah musuh mati:

Untuk menerapkan jenis peluru tambahan agar pemain Anda dapat menikmatinya, yang perlu Anda lakukan adalah menambahkan kode yang sesuai untuk setiap hadiah. Buatlah penghargaan atas hasil yang Anda buat, seperti yang telah kami lakukan sebelumnya.


Selamat!

Anda telah menyelesaikan tutorial tentang cara membuat permainan platfor metroidvania Megaman di Contruct 2. Selanjutnya Anda hanya perlu membangun permainan Anda berdasarkan pada apa yang telah Anda pelajari di sini untuk membuatnya menjadi milik Anda sendiri.  Tambahkan lebih banyak tipe musuh, level lebih, powerups dan lainnya. Semoga berhasil dan selamat bersenang - senang.

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.