Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Game Development
  2. Platformer
Gamedevelopment

Membina Beat 'Em Up dalam Pembuat Permainan, Bahagian 1: Pergerakan Pemain, Serangan, dan Asas Musuh

by
Difficulty:IntermediateLength:LongLanguages:

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

Pada zaman Arked kejiranan dan hari-hari awal permainan konsol, permainan Beat 'Em Up adalah salah satu daripada genre yang paling popular. Dilahirkan dari perkahwinan platformer dan Permainan Pertarungan, Beat 'Em Ups adalah permainan tindakan kombo yang berasaskan pemain melancarkan gerombolan musuh sambil maju melalui persekitaran yang hampir mendatar.

Dalam permainan moden, gaya Beat 'Em Up seperti Kura-kura Dalam Masa dan X-Men, permainan arked telah digantikan oleh Brawlers 3D seperti Shadow of Mordor dan Arkham Knight, evolusi AAA dalam kelas-kelas klasik ini.

Dalam siri artikel ini, kita akan melihat kembali dan meneroka bagaimana membuat permainan Beat 'Em Up klasik.

Bersiap sedia

Sebelum bergerak ke hadapan, mari kita bincangkan tentang kemahiran yang diperlukan untuk tutorial ini. Permainan yang kami buat akan dibina di Game Maker Studio Pro, yang boleh didapati secara percuma dari laman web YoYo Games.

Anda juga harus mempunyai sekurang-kurangnya pemahaman asas GML, bahasa pengekodan built-in Game Maker. Walaupun saya akan meluangkan masa untuk menerangkan bagaimana kod berfungsi dan apa sahaja yang dilakukan, kita akan membincangkan beberapa konsep pengaturcaraan sederhana, termasuk AI, jadi lebih mudah difahami jika anda sudah mempunyai asas yang kuat untuk bekerja dari .

Juga pastikan anda memuat turun fail zip Part 1 Aset yang disertakan di bahagian atas artikel ini, kerana ia termasuk grafik dan bunyi yang anda perlukan untuk melengkapkan artikel ini Fail zip ini juga termasuk projek Game Maker siap untuk bahagian ini siri, jadi anda boleh merujuknya jika anda menghadapi sebarang masalah.

Sekarang buka Pembuat Permainan, dan mari bermula.

Mengimport Grafik

Dalam artikel ini kita akan membuat objek pemain dan objek musuh yang boleh kita bunuh, dan kita akan memberi pemain kemampuan untuk bergerak dan menyerang. Sebelum kita dapat melakukan apa-apa, kita perlu menambahkan beberapa grafik yang boleh kita gunakan untuk pemain dan musuh. Mari kita mulakan dengan animasi Idle Pemain.

  1. Klik kanan folder Sprites dan pilih Buat Sprite.
  2. Nama SPR_PlayerIdle sprite.
  3. Gunakan pilihan Load Sprite, dan navigasi ke fail imej yang anda muat turun untuk tutorial ini.
  4. Pilih Aset> Imej> Pemain> PlayerIdle.png. Ini adalah satu-satunya bingkai yang kami perlukan untuk animasi ini.

Sekarang imej itu diimport, kita perlu menetapkan asalnya. Jika anda melihat semua animasi pemain, anda akan melihat bahawa imej tidak semua saiz yang sama. Ini bermakna kedudukan watak tidak sama dalam setiap imej sama ada. Jika kita menggunakan imej-imej ini bersama-sama, ia boleh menyebabkan wataknya beralih kedudukan ketika mereka menghidupkan, dan membuang kotak-kotak kita. Dalam imej di bawah, anda dapat melihat bingkai pertama tiga animasi pemain yang berbeza, dan bagaimana perbandingan kedudukannya.

The first frame from three of the animations overlaid on top of each other for comparison

Jika kita beralih antara animasi ini tanpa menyesuaikan asal-usul, kedudukan pemain akan berubah dengan jelas dari satu ke yang berikutnya. Untuk menyelesaikannya, kami dapat menetapkan asalnya secara manual supaya ia berada di kedudukan yang sama untuk setiap animasi, dan Pemain tidak akan beralih.

Apabila melakukan ini, ia membantu untuk mempunyai titik rujukan pada watak untuk digunakan sebagai panduan supaya anda dapat dengan mudah mengetahui jika asal perlu diselaraskan. Untuk semua grafik watak, saya akan menggunakan tempat yang besar di dada sebagai titik rujukan saya. Saya akan meletakkan asal pada bahagian paling bawah imej dan di sebelah kiri tempat. Saya telah meningkatkan tepu pada imej di bawah supaya anda boleh melihat apa yang saya maksudkan.

An exampleof how the origin should be setup for the images incldued with the tutorial

Untuk animasi Idle, asalnya ialah pada x = 40, y = 117.

Sekarang kita perlu mengimport seluruh sprite yang akan kita gunakan dalam artikel ini. Gunakan jadual di bawah untuk melihat imej yang hendak diimport, apa yang harus diberi nama sprit, dan tempat asalnya harus ditempatkan.

Nama Sprite Imej Asal
SPR_PlayerWalking
PlayerWalking1.png,
PlayerWalking2.png,
PlayerWalking3.png,
PlayerWalking4.png,
PlayerWalking5.png,
PlayerWalking6.png
X = 43, Y = 117
SPR_PlayerBasicPunch
PlayerPunchA1.png,
PlayerPunchA2.png,
PlayerPunchA3.png,
PlayerPunchA4.png,
PlayerPunchA5.png
X = 55, Y = 122
SPR_PlayerStrongPunch
PlayerPunchB1.png,
PlayerPunchB2.png,
PlayerPunchB3.png,
PlayerPunchB4.png,
PlayerPunchB5.png
X = 60, Y = 124
SPR_PlayerHit
PlayerHit.png
X = 43, Y = 117

Kami juga perlu mengimport beberapa grafik Enemy. Kita boleh melakukan ini dengan cara yang sama. Imej-imej ini akan ditemui di dalam folder Aset> Imej> Standard Enemy.

Nama Sprite

Imej

Kedudukan Asal

SPR_EnemyIdle

RedEnemyIdle.png

X = 40, Y = 117

SPR_EnemyWalking

RedEnemyWalking1.png, RedEnemyWalking2.png, RedEnemyWalking3.png, RedEnemyWalking4.png, RedEnemyWalking5.png, RedEnemyWalking6.png

X = 45, Y = 117

SPR_EnemyHit

RedEnemyHit.png

X = 46, Y = 117

Mencipta Objek Permainan Pertama Kami

Sekarang kita mempunyai semua grafik yang kita perlukan, kita akan mula membina permainan kita dengan membuat objek Pemain dan objek Enemy.

  1. Klik kanan pada objek Objek dan pilih Create/Insert Objek.
  2. Namakan objek baru OBJ_Player.
  3. Tetapkan sprite objek ke SPR_PlayerIdle.
  4. Gunakan Add Event> Create.
  5. Di bawah tab Control, tambah Excute Code Pelaksanaan.
  6. Tambahkan Code berikut:

Kod yang kami ada di atas menetapkan beberapa pembolehubah asas untuk objek Pemain kami. Semasa kami membangunkan permainan kami, kami akan menambah lebih banyak pembolehubah, tetapi mari lihat apa yang kami ada setakat ini.

Kelajuan adalah kelajuan pergerakan pemain, manakala SpeedMod akan mengubah kelajuan pemain berdasarkan powerups, dan debuffs.XSpeed ​​dan YSpeed ​​akan digunakan untuk benar-benar menetapkan kelajuan Pemain di setiap arah ketika mereka bergerak. IsAttacking dan IsHit memberitahu kami sama ada pemain menyerang atau melanda supaya kami dapat menghentikannya dari bergerak, dan AttackType memberitahu kami serangan apa yang dia gunakan. Akhirnya, MaxHP dan CurrentHP menjejaki kesihatan pemain.

Anda juga harus melihat pembolehubah OnGround dan GroundY. Pembolehubah ini tidak begitu penting sekarang, tetapi ia akan digunakan kemudian apabila kita menambah perkara seperti Knockback.

Perkara terakhir yang dilakukan oleh kod ini ialah set imej_speed, yang mengawal seberapa cepat animasi kami akan dimainkan.

Walaupun kita berada di situ, mari membuat objek Enemy juga.

  1. Klik kanan pada objek Objek dan pilih Buat/Masukkan Objek.
  2. Namakan objek baru OBJ_Enemy.
  3. Tetapkan sprite objek ke SPR_EnemyIdle.
  4. Gunakan Tambah Acara> Buat.
  5. Di bawah tab Control, tambah Excecute Code Pelaksanaan.
  6. Tambah kod berikut:

Seperti yang anda lihat, Enemy kami pada masa ini sangat mirip dengan pemain kami, dan menggunakan banyak pembolehubah yang sama. Pembolehubah tambahan ialah SideMod, yang akhirnya akan digunakan untuk AI Enemy kami.

Menambah Bilik

Dengan musuh asas dan objek pemain kami ditubuhkan, mari menambah ruang kepada permainan kami untuk mereka berjalan di dalamnya.

  1. Klik kanan folder Bilik dan pilih Create/Insert Room.
  2. Biarkan saiz bilik seperti sekarang.
  3. Pergi ke tab Objek.
  4. Pilih OBJ_Player dan tambahkannya ke bilik anda di sebelah kiri.
  5. Pilih OBJ_Enemy dan tambahkan beberapa musuh di sebelah kanan.

Di bawah ini anda dapat melihat apa ruang asas boleh kelihatan seperti, tetapi ia baik-baik saja jika anda membuat anda sedikit berbeza daripada saya.

Menjelang akhir siri ini, kami akan membuat tahap yang lebih menarik, tetapi ini perlu dilakukan sekarang.

An example of a possible layout for the room

Menambah Shadows

Sebelum kita menambah pergerakan, mari kita lihat jika kita boleh memperbaiki rupa permainan sedikit. Sekarang, perkara kelihatan sangat rata kerana watak-wataknya berdiri di hadapan latar belakang abu-abu seragam. Kita boleh membetulkannya dengan menambahkan bayang-bayang di bawah watak-watak untuk mensimulasikan kedalaman dan menjadikannya kelihatan seolah-olah watak-watak itu berdiri di persekitaran, dan bukannya bilik kelabu kosong.

  1. Buka objek Pemain dan pilih Tambah Acara> Gambar> Gambar.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Semua kod ini tidak menggambarkan bulatan kelabu yang sedikit telus dan gelap di bawah watak pemain. Ia sangat mudah, tetapi apabila kita melihatnya dalam permainan, ia akan melakukan banyak untuk membuat watak berasa seolah-olah dia berdiri di atas tanah. Apabila anda pergi dalam permainan, wataknya kini akan kelihatan seperti ini:

The player character with a shadow implemented

Lebih baik!

Sekarang bahawa watak pemain kelihatan baik, kita harus melakukan perkara yang sama untuk Musuh. Ikuti langkah yang sama untuk menambah bayangan untuk watak musuh.

Apabila anda selesai, jika anda menguji permainan anda, sepatutnya kelihatan seperti ini:

All of the characters with shadows enabled in-game

Sedikit perubahan seperti ini benar-benar dapat memperbaiki permainan dan membantu merasakannya lebih menarik. Dalam kes ini bayang-bayang banyak membantu untuk 'menjual' alam sekitar dan memberi kedalaman, walaupun ia tidak sempurna.

Sekarang permainan kami kelihatan agak menarik, kami boleh menambah beberapa permainan sebenar.

Gerakan Pemain

Setakat ini kami telah menetapkan watak kami, tetapi kami sebenarnya tidak memberitahu mereka bagaimana untuk bergerak atau menyerang. Oleh kerana pemain kami tidak dapat menyerang musuh dari semua jalan di seberang lapangan, kami akan bermula dengan pergerakan. Ini adalah sekeping kod yang cukup panjang, jadi kami akan membuatnya secara bertambah dan menambahnya secara sekeping. Mari tambahkan sekeping pertama.

  1. Pergi ke Objek Pemain.
  2. Gunakan Tambah Acara> Langkah> Langkah.
  3. Di bawah tab Control, tambah tindakan Execute Code.
  4. Tambah kod berikut:

Semua kod ini adalah memeriksa bahawa HP pemain lebih besar dari 0. Jika tidak, pemain dimusnahkan.

Sekarang tambahkan sebahagian kod ini ke bahagian if pernyataan tersebut:

Bahagian kod ini memeriksa sama ada kunci A atau D sedang ditekan, dan menetapkan XSpeed ​​of Player dengan sewajarnya. Jika kekunci A berada di bawah XSpeed ​​Pemain adalah negatif, bermakna mereka bergerak ke belakang, dan jika kekunci D turun, itu positif, bermakna mereka bergerak ke hadapan.

Kita tidak boleh bergerak ke depan dan belakang sahaja. Kita perlu bergerak ke atas dan ke bawah juga, jadi mari tambahkan sekeping kod lain untuk mengendalikan W dan S.

Tambah sebahagian kod ini ke dalam bahagian if kenyataan itu, selepas bahagian sebelumnya:

Kod ini melakukan perkara yang sama dengan yang sebelumnya, kecuali dengan YSpeed.

Anda mungkin berfikir pada diri sendiri,  'Ini hebat, watak saya sudah bersedia untuk bergerak." Pada hakikatnya, semua yang kami lakukan setakat ini adalah menetapkan kelajuan mereka, dan kami masih perlu memindahkan mereka. Oleh kerana blok kod berikutnya adalah lebih lama, kami akan memecahkannya lagi ke bahagian kecil. Mari kita mulakan dengan menambah versi yang digerakkan supaya anda dapat melihat apa yang akan dilakukannya.

Tambah sebahagian kod ini ke bahagian if pernyataan itu, selepas bahagian sebelumnya.

Jadi seperti yang anda lihat, kita akan melakukan tiga perkara.

Pertama, kita secara fizikal memindahkan pemain menggunakan pembolehubah XSpeed ​​dan YSpeed; Walau bagaimanapun, kita mengabaikan YSpeed ​​jika Player tidak berada di lapangan.

Seterusnya, kami menukar arah sprite pemain berdasarkan arahan yang dimainkan oleh Pemain. Dengan cara ini jika pemain bergerak ke kiri, mereka menghadap ke kiri, dan jika mereka bergerak ke kanan, mereka menghadap ke kanan.

Akhir sekali, kami menghidupkan pemain supaya mereka menggunakan sprit Idle ketika mereka tidak bergerak dan sprite berjalan ketika mereka.

Mari menggantikan komen ini satu demi satu. Gantikan komen // Jika pemain berada di lapangan ... dengan kod berikut:

Utama jika pernyataan untuk kod ini memeriksa sama ada Pemain berada di lapangan. Sekiranya mereka berada, maka ia mempunyai pedalaman jika pernyataan yang menentukan sama ada Pemain bergerak secara menyerong, dan melambatkan mereka untuk menghalang mereka bergerak lebih jauh daripada mereka jika mereka berpindah ke salah satu arah kardinal. Jika pemain tidak berada di lapangan, hanya pergerakan X mereka dipertimbangkan.

Seterusnya, gantikan // Tukar arah ... komen dengan kod berikut:

Kod ini lebih mudah daripada blok terakhir. Apa yang dilakukan ialah menetapkan Xscale sprite pemain berdasarkan arahan yang mereka bergerak. Alasan yang kita periksa sama ada XSpeed ​​adalah sama dengan 0 adalah bahawa jika kita tidak Pemain akan menjadi 0 piksel lebar apabila mereka tidak bergerak.

Akhir sekali, ganti // Menghidupkan Pemain ... komen dengan kod berikut:

Ini adalah sekeping kod yang agak mudah. Jika kedua-dua XSpeed ​​dan YSpeed ​​Pemain adalah 0, dan pemain berada di atas tanah, ia mesti bermakna bahawa Pemain tidak bergerak, dan ia menetapkan animasi mereka kepada Idle. Jika tidak, jika XSpeed ​​atau YSpeed ​​tidak sama dengan 0, pemain berada di tanah, dan mereka belum menggunakan sprite Walking, ia menetapkan animasi mereka ke Walking.

Bahagian benar-benar penting mengenai kod ini ialah kami mengesahkan mereka tidak menggunakan animasi berjalan sebelum kami menetapkannya sebagai animasi mereka. Sekiranya kami tidak melakukan ini, maka setiap pemain yang memindahkan kod ini akan kembali seperti yang benar, dan ia sentiasa akan cuba memulakan semula animasi berjalan. Dengan menyemak untuk memastikan mereka tidak menggunakan animasi itu, kami mengelakkan isu ini dan membolehkan animasi itu menjadi normal.

Perkara terakhir yang kami perlukan sebelum pergerakan asas kami selesai adalah untuk menambah kod ini pada akhir peristiwa Langkah, selepas pernyataan if/else:

Kod ini menetapkan GroundY untuk pemain dan menetapkan kedalaman mereka pada skrin berdasarkan GroundY mereka. Di bawah tab Kawalan, tambah tindakan Kod Pelaksanaan. Pembolehubah ini juga membantu watak pemain menjejaki betapa tingginya mereka dan ketika mereka harus memukul tanah.

Kenyataan mendalam selepas itu menjadikannya lebih tinggi pada skrin pemain yang diperolehi, kembali lagi mereka akan ditarik. Dengan cara ini, apabila pemain sedang melancarkan musuh yang lalu dan bergerak di sekitar lapangan, ia sentiasa digambarkan dengan betul berbanding objek / watak lain.

Sekiranya anda masuk dalam permainan dan mula menguji, kini anda kini boleh berjalan di sekitar kawasan permainan dengan pemain. Anda mungkin melihat beberapa isu, walaupun, apabila anda berjalan ke musuh.

An example of bad depth drawing

Sebab kedalaman tidak berfungsi seperti yang saya nyatakan di atas adalah kerana kita perlu menambah pernyataan serupa dengan kod Enemy supaya kedalamannya ditetapkan dengan betul juga.

  1. Buka objek Musuh dan pilih Tambah Acara> Langkah> Langkah.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Sekarang jika anda masuk ke dalam permainan, anda akan melihat bahawa kedalaman berfungsi dengan betul. Apabila anda bergerak di dekat musuh, anda harus lulus di hadapan dan di belakangnya dengan betul.

The corrected depth drawing

Menyediakan untuk Serangan: Lapisan

Sekarang bahawa kod pergerakan awal kami selesai, kami boleh terus menyerang. Sebelum kita dapat menyerang objek serangan sebenar, kita perlu menambah dua perkara.

Pertama, kita memerlukan pemalar baru yang memberitahu kita bagaimana watak-watak yang hampir pasti untuk memukul satu sama lain. Dalam Beat 'Em Up seperti ini, kami mensimulasikan kedalaman 3D. Kami melakukan ini dalam beberapa cara, dan satu cara adalah dengan menjejaki kedalaman pemain menggunakan variabel mendalam seperti yang kita lakukan di atas. Cara lain yang akan kita lakukan adalah dengan menentukan sejauh mana dua objek boleh berada di pesawat Y, sebelum mereka tidak dapat berinteraksi lagi. Dengan cara ini, walaupun sprit bertindih/bertabrakan, tabrakan hanya akan menghitung jika watak-wataknya cukup dekat di ruang permainan untuk membolehkan interaksi itu dan perspektif tidak akan menimbulkan masalah.

Jika anda masih tidak pasti apa yang saya maksudkan, sila lihat imej di bawah ini:

A collission that should not be considered valid for an attack

Dalam imej ini, pemain dan musuh bertembung secara teknikal, tetapi anda boleh memberitahu dari perspektif bahawa mereka tidak cukup dekat untuk berinteraksi. Dengan mewujudkan lapisan yang dipanggil LayerSize, kita boleh menetapkan jarak menegak maksimum untuk membolehkan sebelum dua objek tidak lagi berinteraksi.

  1. Di bar sisi di bawah Macros, pilih Semua Konfigurasi.
  2. Dalam makro yang pertama, masukkan nama LayerSize dan tetapkan nilai kepada 35.
  3. Tekan Okay.

Ini adalah nilai yang saya datang dengan lebih dari masa yang saya fikir berfungsi dengan baik, tetapi jika anda ingin anda boleh bermain-main dengan meningkatkan atau mengurangkan nilai ini untuk mencari sesuatu yang berfungsi dengan lebih baik untuk permainan anda.

Seperti yang kita buat serangan kita, pemalar ini akan membantu menentukan sama ada serangan berlaku.

Bersedia untuk Serangan: Musuh Menakjubkan

Perkara lain yang perlu kita lakukan sebelum membuat sebarang serangan menubuhkan animasi hit musuh, supaya mereka bertindak balas apabila kita menyerang mereka. Untuk ini kami akan menggunakan animasi EnemyHit, yang kami diimport lebih awal, dan pembolehubah IsHit.

Pertama, kita akan masuk ke acara langkah dan mengubah suai kod supaya animasi hit akan digunakan.

  1. Buka OBJ_Enemy.
  2. Pilih peristiwa Langkah, dan buka tindakan kod.
  3. Tambah kod berikut ke permulaan acara:

Hanya untuk memastikan kod ini berfungsi, masuk ke acara penciptaan Enemy dan tukar pemboleh ubah IsHit kepada benar. Kemudian pergi dalam permainan, dan lihat pada animasi Enemy. Anda harus melihat sesuatu seperti ini:

The Enemy Hit animation

Walaupun animasi Hit pasti berfungsi, anda mungkin akan melihat bahawa ia tidak pernah berakhir. Alasannya adalah kerana kita tidak mempunyai kod yang mengesetkan keadaan Ismeit Enemy selepas masa tertentu. Oleh itu, apabila kita menetapkannya untuk benar, ia kekal seperti itu selama-lamanya.

Untuk membuat kerja ini, kami akan menyediakan penggera yang akan menetapkan semula pemboleh ubah IsHit, dan membuat musuh Idle sekali lagi apabila ia dimatikan. Kemudian, apabila setiap kali musuh terkena, setiap serangan akan mengandungi pernyataan yang memberitahu Enemy berapa lama mereka harus terkejut sebelum kembali ke melahu, dan akan memulakan penggera dengan jumlah waktu itu.

  1. Pergi ke OBJ_Enemy dan pilih Tambah Acara> Penggera> Penggera 0.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Apa yang perlu dilakukan ialah menetapkan semula IsHit, dan acara Langkah akan menjaga selebihnya.

Anda tidak boleh menguji ini untuk memastikan ia berfungsi lagi, tetapi jika anda menambah kod di bawah hingga akhir kejadian Buat, anda perlu melihat secara ringkas apa yang baru kami buat dalam tindakan apabila permainan bermula. Pastikan anda mengalih keluar kod ini, walaupun, dan tetapkan IsHit kembali kepada palsu, sebelum anda beralih.

Mewujudkan Objek Serangan

Sekarang bahawa kita mempunyai semua kerja persiapan itu, kita boleh memulakan objek serangan sebenar.

Pertama, kita perlu membuat Obyek Serangan Ibu bapa untuk mengandungi semua statistik serangan, seperti berapa banyak kerosakan, apa yang kelihatan seperti kotak, kesan zarah apa yang harus digunakan, dan sebagainya. Membuat objek yang unik untuk setiap serangan adalah amalan yang lebih baik daripada memaksa objek Pemain atau Musuh untuk menyimpan semua maklumat yang relevan, dan mempunyai objek induk membuatnya lebih mudah. Ia juga membuat kod serangan lebih serba boleh, dan membolehkan kami memprogram serangan tunggal yang boleh digunakan oleh pelbagai aksara.

Untuk membuat objek serangan pertama, ikuti langkah berikut:

  1. Klik kanan pada objek Objek dan pilih Buat/Masukkan Objek.
  2. Namakan objek baru ATK.
  3. Gunakan Tambah Acara> Buat.
  4. Di bawah tab Control, tambah tindakan Execute Code.
  5. Tambah kod berikut:

Barisan pertama kod menetapkan kedalaman Attack dengan cara yang sama kami menetapkan kedalaman untuk Pemain. Selebihnya, kod, menetapkan beberapa pembolehubah penting untuk Serangan. Mari lihat apa pembolehubah ini. Kerosakan adalah berapa kerosakan serangan itu. StunLength adalah bilangan bingkai yang musuh akan terkejut dengan pemboleh ubah IsHit. Pemiliknya yang membuat serangan itu. Ini boleh menjadi Pemain atau Musuh, dan menghalang musuh daripada mencederakan satu sama lain. DMGFrame membolehkan kita mengatakan apabila serangan itu akan menangani kerosakan.

Dalam Beat 'Em Up, pemasaan adalah penting, dan serangan hanya harus menangani kerosakan jika mereka melanda pada waktu yang tepat. Lihatlah serangan ini:

An example attack from an Enemy we will implement in a later tutorial

Sekiranya anda mengambil kerosakan sebelum tangan musuh turun, anda akan berasa tertipu, kerana ia akan kelihatan seolah-olah ia tidak akan menyakiti lagi. Pembolehubah DMGFrame memberitahu objek serangan yang kerangka harus menangani kerosakan, sehingga perlanggaran pada setiap bingkai lain diabaikan. Perkara-perkara seperti ini membentuk asas untuk semua permainan tempur berasaskan masa, dari Turtles dalam Masa hingga Jiwa Gelap, dan memungkinkan untuk 'membaca' serangan lawan anda dan menghindar sebelum mereka melanda.

Sekarang mari kita tambahkan kod perlanggaran untuk serangan itu supaya ia menjejaskan kerosakan apabila ia mencecah.

  1. Dalam objek Atk, pergi ke Tambah Acara> Perlanggaran> OBJ_Enemy.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Kod yang kita ada di atas kebakaran apabila serangan bertembung dengan objek musuh, dan menggunakan pernyataan mudah jika menentukan serangan itu. Kenyataan jika menguji empat perkara:

  1. Adakah bingkai semasa sama dengan bingkai kerosakan?
  2. Adakah perbezaan antara kedalaman serangan dan kedalaman musuh kurang daripada LayerSize?
  3. Adakah serangan dan musuh mempunyai nilai Y yang hampir? Dalam erti kata lain, adakah mereka berdua di atas tanah, atau kedua-dua dekat satu sama lain di udara?
  4. Adakah serangan yang dibuat oleh Pemain? Memandangkan peristiwa ini berlaku untuk perlanggaran dengan musuh, kami semak untuk memastikan pemain membuat serangan itu. Anda boleh mengalih keluar cek ini jika anda mahu musuh dapat mencederakan satu sama lain.

Jika semua keadaan ini benar, maka serangan itu berjaya, dan musuh mengambil kerosakan dan terkejut.

Kami juga perlu melakukan sesuatu yang serupa untuk pertembungan dengan Pemain.

  1. Dalam objek Atk, pergi ke Tambah Acara> Perlanggaran> OBJ_Player.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Ini adalah kod yang sama dengan perlanggaran Musuh, kecuali ia memeriksa jika serangan dibuat oleh Musuh, dan bukannya Pemain, dan menghalang Pemain daripada mengambil kerosakan dari serangan mereka sendiri.

Sekarang kita perlu membuat hitbox untuk serangan itu juga. Hitboxes adalah bahagian sprite yang dianggap 'bertembung', dan ia digunakan untuk memastikan hanya bahagian tertentu sprite yang menimbulkan perlanggaran dan menyebabkan watak itu terluka. Sebagai contoh, jika saya kembali ke serangan aksara Kuning, saya hanya mahu sebahagian kecil, yang digariskan dengan warna merah di bawah, untuk bertembung.

The portion of the Enemys attack which should damage the Player

Jika apa-apa selain daripada lengan itu menyebabkan Pemain merosakkan, mereka akan berasa kecewa dan permainan akan kelihatan tidak adil. Untuk menyelesaikan masalah ini, saya boleh menggunakan hitbox yang hanya mendaftarkan bahagian sprit tersebut dan mengabaikan segala yang lain.

Anda boleh mengimport hitbox untuk serangan kami menggunakan jadual di bawah. Kemudian berikan hitbox sebagai sprite objek ATK sebaik sahaja anda selesai.

Sprite Name

Images

Origin Position

SPR_BasicPunch_Hitbox

BasicPunchHitbox1.png,

BasicPunchHitbox2.png,

BasicPunchHitbox3

BasicPunchHitbox4.png,

basicpunchhitbox5.png

X = 55, Y = 122

Apabila pemain menyerang, mereka akan menetapkan sprite mereka dengan sewajarnya, tetapi menggunakan sprite hitbox untuk sprite ATK memastikan bahawa hanya bahagian animasi serangan itu akan mendaftarkan perlanggaran tersebut.

Perkara terakhir yang perlu kita lakukan untuk serangan ini adalah memastikan ia dimusnahkan apabila serangan selesai. Jika kita tidak memusnahkannya, serangan itu akan terus berjalan tak terhingga dan membunuh musuh kita dengan segera. Untuk memastikan ini tidak berlaku, kami akan menggunakan acara Endapan Animasi.

  1. Pergi ke objek ATK dan pilih Tambah Acara> Lain-lain> Akhir Animasi.
  2. Di bawah tab Control, tambah tindakan  Execute Code.
  3. Tambah kod berikut:

Dengan peristiwa ini, objek serangan akan segera memusnahkan dirinya apabila ia selesai berjalan, dan ia tidak akan berlaku untuk menyebabkan kita lebih banyak masalah kemudian.

Sekarang anda hanya perlu nyahtandai kotak semak Terlihat pada Objek ATK supaya kotak hitbox tidak dapat dilihat.

Itu melengkapkan objek Serangan asas kami, tetapi kami masih perlu membina serangan sebenar pertama kami dengan memperluas objek asas. Menggunakan objek ATK sebagai asas untuk serangan lain menjadikannya mudah untuk membina pelbagai jenis serangan yang unik.

  1. Buat Objek baru yang dipanggil ATK_BasicPunch.
  2. Tetapkan Parent  kepada objek ATK.
  3. Berikan Sprite SPR_BasicPunch_Hitbox.
  4. Gunakan Tambah Acara> Buat.
  5. Di bawah tab Control, tambah tindakan Execute Code.
  6. Tambah kod berikut:

Pukulan Asas kini secara teknikal selesai kerana ia memperluaskan objek ATK dan mewarisi semua sifat yang diletakkan dalam kejadian Buat. Sekiranya anda mahu pukulan asas anda menjadi lebih kuat atau menusuk untuk tempoh masa yang lebih lama, namun, anda boleh mengubah sifat tersebut dengan menetapkannya lagi di sini.

Misalnya, Anda dapat menggunakan:

Ini akan membuat serangan itu menghasilkan lebih banyak kerusakan, tetapi stun untuk frame yang lebih sedikit.

Anda juga boleh menggunakan:

Kod ini akan mengurangkan kerosakan, tetapi menantang musuh lebih lama.

Anda boleh merasa bebas untuk mengubah suai pembolehubah asas Kerosakan, StunLength, dan juga DMGFrame (pastikan nombor ini tidak lebih dari 5, kerana serangan itu hanya 5 bingkai panjang) namun anda mahu, dan membuat banyak variasi yang berbeza pada jenis yang sama serangan. Walau apa pun yang anda lakukan, pastikan bahawa serangan baru anda mempunyai objek ATK yang ditetapkan sebagai Induk, dan mempunyai line event_inherited () pada permulaan apa-apa peristiwa yang digunakan oleh kelas Induk.

Membuat Serangan Pemain

Sekarang serangan kami selesai, pemain kami perlu menggunakannya. Untuk sistem tempur kami, kami akan menggunakan tiga skim kawalan yang mungkin untuk menampung banyak pemain yang berbeza.

Kami akan membiarkan pemain menggunakan IJKL, kekunci numpad 4856, dan juga kekunci anak panah, mungkin susun atur untuk butang serangan. Ini memberikan pemain keupayaan untuk menggunakan sebarang tetapan yang mereka suka berdasarkan saiz/susun atur papan kekunci mereka. Selain itu, kerana ketiga-tiga set itu mempunyai susun atur asas yang sama, mudah untuk menjadikan mereka semua berfungsi. J, 4, dan Arrow Kiri akan menjadi serangan ringan, I, 8, dan Arrow Up akan menjadi serangan yang kuat, K, 5, dan Arrow Down akan Grab, dan L, 6, dan Arrow Right akan menjadi Istimewa.

  1. Dalam objek Pemain, pilih Tambah Acara> Tekan Kekunci> Kekunci Sebarang.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Pertama, kod ini memeriksa jika pemain menekan mana-mana butang Light Attack yang sah yang dibincangkan sebelumnya, Arahan Kiri, 4 kekunci pada numpad, atau kekunci J. Jika ya, ia menetapkan Jenis Attack Player kepada Punch Asas. Selepas menentukan AttackType, ia menyemak untuk memastikan pengguna berada di lapangan, dan memanggil acara Attack jika mereka berada.

Acara Serangan akan mencipta objek serangan berdasarkan serangan pemain yang digunakan. Mungkin kelihatan aneh bahawa kami membuat peristiwa yang berasingan ini, kerana kod kami sangat mudah, tetapi apabila kami menambahkan lebih banyak serangan, dan akhirnya melaksanakan gabungan, ia akan membuat kod kami lebih mudah untuk diuruskan jika unsur-unsur ini dipisahkan.

  1. Dalam objek Pemain, pilih Tambah Acara> Lain-lain> Ditetapkan Pengguna> Pengguna 2.
  2. Di bawah tab Control, tambah tindakan Execute Code.
  3. Tambah kod berikut:

Kod ini sebenarnya agak mudah, walaupun ia kelihatan rumit pada mulanya.

Pertama, kita buat objek sementara untuk menyimpan serangan itu sendiri. Kemudian, selagi pemain bukan sahaja terkena, dan mereka bukan Mati, kita menentukan serangan mana yang digunakan, menetapkan animasi, dan membuat objek serangan jenis itu. Akhirnya, jika objek serangan dibuat, ia menetapkan pemain untuk menyerang, menetapkan arah dan kelajuan serangan untuk menyesuaikan pemain, dan menetapkan nilai Pemilik serangan dengan sewajarnya.

Pada ketika ini, kita boleh masuk ke dalam permainan dan menguji serangan ini. Jika anda berjalan ke Enemy dan gunakan salah satu butang serangan ringan, anda akan melihat serangan pemain dan Enemy terkena.

Anda mungkin melihat masalah, walaupun. Tidak kira berapa lama anda menunggu, animasi Pemain tidak pernah mematikan animasi serangan, walaupun Enemy tidak lagi merosakkan. Anda juga akan mendapati bahawa anda tidak boleh bergerak lagi.

Ini adalah isu yang sama yang kita hadapi sebelumnya dengan Enemy dan animasi hit mereka. Sama seperti Enemy, kita perlu menyediakan satu sistem yang mengubah semula pembolehubah IsAttacking Pemain apabila serangan selesai. Kami akan melakukan ini dengan satu lagi acara Endapan Animasi.

  1. Pergi ke OBJ_Player dan pilih Buat Acara> Lain-lain> Akhir Animasi.
  2. Di bawah tab Control , tambah tindakan Execute Code.
  3. Tambah kod berikut:

Sekarang apabila anda masuk dalam permainan, serangan itu harus berfungsi dengan tepat seperti yang anda harapkan, dan animasi harus berakhir apabila ia sepatutnya.

Menambah Bunyi

Serangan kami berfungsi dengan baik dalam permainan, tetapi ia tidak melakukan tugas yang baik untuk melukis pemain. Sebahagian masalah ialah kita tidak mempunyai sebarang kesan bunyi untuk memberi maklum balas pemain apabila mereka memukul atau terlepas dengan serangan. Mari selesaikan masalah ini sebelum kita memanggil objek Serangan selesai.

Kita perlu mengimport dua bunyi untuk serangan itu, bunyi Hit dan bunyi Miss. Ikuti langkah-langkah ini untuk mengimport bunyi pertama.

  1. Klik kanan folder Bunyi, dan pilih Cipta Bunyi.
  2. Tetapkan Nama kepada SND_BasicPunch1.
  3. Import fail bunyi LightPunch1.wav dari aset projek.
  4. Tetapkan Kadar Sampel kepada 48000.
  5. Tetapkan Bit Rate menjadi 320.
  6. Tekan Ok untuk menyimpan bunyi anda.

Kerja hebat! Anda telah mengimport kesan bunyi pertama anda.

Sekarang kita akan melakukan perkara yang sama untuk suara Miss.

  1. Klik kanan folder Bunyi, dan pilih Cipta Bunyi.
  2. Tetapkan Nama kepada SND_MissedPunch.
  3. Import fail suara Miss.wav dari aset projek.
  4. Tetapkan Kadar Sampel kepada 48000.
  5. Tetapkan Bit Rate menjadi 320.
  6. Tekan Ok untuk menyimpan bunyi anda.

Sekarang kita telah mengimport bunyi kita, kita perlu menambah beberapa pembolehubah baharu kepada objek serangan kita supaya dapat menggunakan bunyi dengan betul.

  1. Pergi ke OBJ_Attack dan buka Buat Acara.
  2. Tambah kod berikut pada akhir tindakan Execute Code:

Ketiga pembolehubah ini agak mudah. Pemboleh ubah HitSound dan MissSound membolehkan kami menyesuaikan bunyi hit dan ketinggalan untuk setiap serangan dalam kejadian mencipta mereka, dengan cara yang sama kami boleh menyesuaikan sifat-sifat lain setiap serangan yang kami buat. Pemboleh ubah Hit membenarkan kami menyemak sama ada serangan berjaya sebelum memainkan bunyi Miss.

Dengan pembolehubah di tempat, kita perlu melaksanakannya. Mula-mula kita akan melaksanakan bunyi Hit.

  1. Dengan OBJ_Attack, Perlanggaran dengan OBJ_Enemy terbuka.
  2. Tambah kod berikut pada akhir pernyataan jika mengesahkan perlanggaran adalah sah:

Semua kod ini tidak memainkan HitSound dan menetapkan pemboleh ubah Hit menjadi benar apabila serangan bertembung dengan Musuh.

Kita boleh menggunakan kod yang sama untuk acara Perlanggaran pemain juga.

  1. Dengan OBJ_Attack, buka Perlanggaran dengan OBJ_Player.
  2. Tambah kod berikut pada akhir pernyataan jika mengesahkan perlanggaran adalah sah:

Akhir sekali, kita perlu memainkan bunyi Miss jika serangan itu tidak memukul apa-apa. Tidak seperti bunyi Hit, yang memainkan pada masa perlanggaran, bunyi Miss hanya akan dimainkan jika objek Serangan dimusnahkan tanpa memukul apa-apa, jadi bunyi ini perlu dimainkan dalam acara Memusnahkan.

  1. Dengan OBJ_Attack, pilih Tambah Acara> Hancurkan.
  2. Di bawah tab Control, tambah tindakan Kod Pelaksanaan.
  3. Tambah kod berikut:

Seperti yang anda dapat lihat, semua yang dilakukan oleh kod ini adalah memainkan MissSound jika Hit sama dengan palsu.

Anda kini boleh masuk dalam permainan dan menguji serangan anda kali terakhir, dan kesan bunyi harus berfungsi dengan sempurna.

Membuat Serangan Kuat

Membuat Serangan Kuat Untuk serangan ini, gunakan jadual di bawah untuk menetapkan kotak hit:

Sprite Name

Imej

Kedudukan Asal

SPR_StrongPunch_Hitbox

StrongPunchHitbox1.png,

StrongPunchHitbox2.png,

StrongPunchHitbox3.png,

StrongPunchHitbox4.png,

StrongPunchHitbox5.png

X = 60, Y = 124

Kami juga harus mengimport HitSound unik untuk serangan ini kerana ia sepatutnya menjadi lebih kuat daripada serangan standard.

  1. Klik kanan folder Bunyi, dan pilih Cipta Bunyi.
  2. Tetapkan Nama kepada SND_StrongPunch1.
  3. Import fail bunyi HeavyPunch1.wav dari aset projek.
  4. Tetapkan Kadar Sampel kepada 48000.
  5. Tetapkan Bit Rate menjadi 320.
  6. Tekan Ok untuk menyimpan bunyi anda.

Sekarang kita mempunyai semua aset sedia, mari kita buat objek serangan sebenar.

  1. Buat Objek baru yang dipanggil ATK_StrongPunch.
  2. Tetapkan Parent kepada objek ATK.
  3. Nyahtandai kotak pilihan Visible.
  4. Berikan Sprite SPR_StrongPunch_Hitbox.
  5. Gunakan Tambah Acara> Buat.
  6. Di bawah tab Control, tambah tindakan Execute Code.
  7. Tambah kod berikut:

Sekarang kembali ke objek Pemain, dan tambah kod ini ke Papan Tekan> Sebarang Kunci peristiwa Utama selepas Serangan Cahaya jika ia juga dapat mengesan apabila pemain menggunakan Serangan Kuat:

Akhirnya, masuk ke Pengguna Ditakrifkan 2, dan tambahkan kod ini pada akhir pernyataan jika membuat objek Light Attack, sehingga juga dapat membuat Serangan Kuat. Pastikan bahawa ia terkandung dalam jika ia menyemak jika Pemain Mati:

Kod anda sepatutnya kelihatan seperti ini:

The updated attack code for the Player

Sekarang jika anda masuk ke dalam permainan, anda harus menggunakan Serangan Cahaya dan Serangan Kuat pada musuh. Seperti yang dapat anda lihat, sementara kedua-dua serangan pada asasnya sangat serupa, mereka dibezakan oleh animasi yang berkaitan dengan mereka, kotak hitak mereka, dan sifat asas mereka.

Kesimpulan

Anda kini boleh menyunting dan mengemas semula serangan-serangan ini dengan bebas apabila anda melihatnya sesuai. Dalam artikel seterusnya kita akan melihat memberi Enemies keupayaan untuk melawan, dan mencipta ciri-ciri yang lebih maju untuk kamera.

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.