Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Platformer

Membina Beat 'Em Up dalam Pembuat Permainan, Bahagian 3: Serangan Kombo, Lebih Banyak AI, dan Pengambilan Kesihatan

by
Difficulty:IntermediateLength:LongLanguages:

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

Dalam artikel terakhir, kami memulakan pertempuran, memberi Pemain kami bar kesihatan, dan memberikan musuh kami keupayaan untuk menyerang Pemain. Ini adalah permulaan baik, tetapi musuh kita masih tidak boleh bergerak ke arah Pemain untuk menyerang, atau berjalan di sekitar Battlefield. Jelas, ini tidak akan memotongnya, jadi mari kita mengambil sedikit masa untuk membina AI kita lebih sedikit.

Sama seperti dalam artikel terakhir, pastikan anda memuatkan pek Aset untuk artikel ini sebelum anda memulakan.

Pergerakan

Perkara pertama yang akan kami lakukan ialah memberi musuh kami ke arah destinasi sasaran. Untuk menetapkan ini, kami memerlukan acara FindTarget, yang menentukan di mana Enemy perlu pergi, dan acara Pindah yang memberitahu Enemy untuk mula bergerak di sana.

Ini akan sama dengan cara kami memindahkan kamera kami kerana kami akan menggunakan pembolehubah TargetX dan TargetY seperti yang kami lakukan di sana. Anda boleh melihat di mana peristiwa-peristiwa ini akan diletakkan di dalam acara Langkah jika anda melihat keadaan PositionFront dan PositionBehind kes.

The comments that we will eventually replace with the targetting and movement code

Pertama, kami akan menambah pemboleh ubah sasaran kami.

  1. Dalam objek OBJ_Enemy, buka kod untuk Buat Acara.
  2. Tambahkan kod berikut pada akhir acara:

Seterusnya, kami akan menambah acara FindTarget. Buat masa ini, acara ini akan mencari kedudukan rawak berhampiran Pemain, dan menetapkan sasaran Enemy ke kedudukan itu. Sebaik sahaja kita mengetahui acara Move berfungsi, kita dapat melaksanakan penargetan yang lebih canggih dengan pernyataan suis.

  1. Dalam objek Musuh, pilih Tambah Acara> Lain-lain> Ditetapkan Pengguna> Pengguna 4.
  2. Tambah Tindakan kuasa > Kod> Jalankan Kod.
  3. Tambah kod berikut:

As I said, this code chooses a random position near the Player, in this case within a 10 pixel radius around them, and sets the Enemy's target position to that point. It also uses an if statement to check whether the Player is still in AttackRange of the target position, or whether the distance between the TargetYand the Player's y adalah lebih besar daripada LayerSize. Dengan cara ini, jika Pemain tidak berpindah sejak kedudukan sasaran terakhir ditemui, kedudukan sasaran tidak akan berubah tanpa alasan.

Sekarang kita perlu membuat kod pergerakan.

  1. Dalam objek Musuh, pilih Tambah Acara> Lain-lain> Ditakrifkan Pengguna> Pengguna 5.
  2. Tambah Tindakan Control > Code > Execute Code.
  3. Tambah kod berikut:

Kod ini memeriksa sejauh mana Enemy berada pada kedudukan sasaran mereka. Jika jarak ke sasaran lebih jauh daripada jarak perpindahan mereka, Enemy bergerak ke arah kedudukan sasaran; jika tidak, mereka berhenti.

Sebelum kita dapat menguji in-game ini, kita perlu menambah peristiwa ini ke acara Langkah di lokasi yang saya letakkan sebelum ini.

Dalam peristiwa Langkah Enemy, gantikan komen // posisi Cari Target dengan kod berikut:

Kemudian gantikan // Pindahkan komen berikut dengan kod berikut:

Sekarang apabila anda masuk dalam permainan, musuh-musuh akan mula bergerak ke arah anda ketika anda memasuki BattleRegion.

Pergerakan itu sendiri seolah-olah berfungsi dengan baik, selain fakta bahawa tidak ada animasi, tetapi anda mungkin melihat sesuatu yang aneh apabila anda menyerang Enemies. Jika anda menyerang Enemy semasa mereka bergerak, mereka tidak berhenti bergerak semasa mereka berada di negara Hit. Ini kerana skrip move_towards_position mengubah pemboleh ubah kelajuan terbina dalam objek (notis huruf kecil), yang memindahkan mereka ke hadapan pada kadar tetap sehingga kita memberitahu kelajuan untuk berubah. Jadi, walaupun selepas Musuh terkena, kelajuan mereka terus bergerak, kerana kami tidak memberitahu mereka untuk berhenti.

Isu ini adalah sebab yang sama kita perlu menetapkan kelajuan secara manual ke 0 apabila mencapai sasaran mereka. Jika kita tidak memberitahu mereka untuk berhenti, mereka tidak akan berhenti sendiri. Kita boleh membetulkannya dengan mengubah peristiwa Langkah supaya kes Hit mereka menetapkan kelajuan mereka kepada 0.

  1. Di OBJ_Enemy, pergi ke Acara Langkah.
  2. Dalam kod itu, cari kes Hit untuk pernyataan suis, dan gantikannya dengan kod ini:

Kini apabila anda masuk dalam permainan dan menyerang musuh, mereka tidak akan bergerak semasa animasi Hit mereka.

Menambah Animasi Asas

Kita pasti bermula dengan permulaan yang baik, tetapi masih terdapat beberapa isu yang jelas dengan pergerakan itu. Pertama sekali, Musuh tidak bernyawa sama sekali-mereka hanya semacam slaid di sekitar medan perang ke arah Pemain. Ini tidak kelihatan sangat baik, jadi mari kita pergi ke acara Animate yang kami buat dalam tutorial lepas untuk memperbaikinya.

  1. Di OBJ_Enemy, masuk ke Pengguna Ditetapkan 3.
  2. Gantikan kes ''PositionFront'' dan ''PositionBehind'' sedia ada dalam pernyataan suis dengan kod ini:

Dalam kod baru ini, perkara pertama yang kita lakukan adalah menetapkan imej_xscale berdasarkan arah yang sedang dipandu oleh Enemy. Jadi jika mereka bergerak ke kiri, mereka akan menghadap ke kiri, dan jika mereka bergerak ke kanan, mereka akan menghadap ke kanan. Kemudian, jika kelajuan mereka tidak sama dengan 0, ia menetapkan animasi mereka ke animasi berjalan, dan jika ia berlaku, ia menetapkan animasi mereka untuk terbiar.

Ia kini perlu kelihatan lebih baik apabila anda menguji dalam permainan.

PositionFront vs. PositionBehind

Pada ketika ini, anda mungkin berfikir 'Mengapa kita perlu PositionFront dan PositionBehind jika mereka melakukan semua perkara yang sama juga?' Nah jika anda melihat gerakan Enemy semasa kami, anda akan melihat terdapat banyak ruang untuk penambahbaikan.

Mempunyai dua negeri berasingan membolehkan kita mempunyai setiap pendekatan musuh dari pelbagai pihak, dan bukannya menyerang semua musuh dari lokasi yang sama. Ini akan membuat pertempuran lebih mencabar, dan sukar untuk melarikan diri.

Untuk melaksanakan ini, kita perlu mengubah kod FindTarget supaya ia mengambil kira keadaan apabila memilih kedudukan sasaran. Daripada menambah pernyataan jika atau pernyataan suis, kami akan melakukan ini menggunakan pembolehubah SideMod.

SideMod sebenarnya adalah satu pembolehubah yang kita ada di tempat dari awal lagi. Jika anda melihat kembali pada kod Buat, dan pernyataan suis dalam acara Langkah Enemy, anda akan melihat bahawa kami telah pun mula menggunakan SideMod.

PositionFront and PositionBehind with SideMod being used

SideMod akan bertindak sebagai pengubah suai yang akan mengimbangi posisi sasaran Enemy, berbanding kedudukan Pemain. Jadi jika SideMod adalah positif, sasaran Enemy akan menjadi julat kedudukan PlayerX, dan jika negatif, sasaran Enemy akan menjadi julat kedudukan PlayerX. Dengan cara ini, kedua-dua negara boleh menggunakan kod penargetan yang sama, tetapi berakhir dengan hasil yang berbeza.

Untuk melihat tindakan ini, mari edit acara Cari Sasaran.

  1. Di OBJ_Enemy, pergi ke Pengguna Ditetapkan 4.
  2. Gantikan pernyataan jika dengan kod berikut:

Kod ini bertambah baik pada kod asal dengan beberapa cara penting. Untuk penargetan itu sendiri, kod penyasaran kini termasuk penampan 60 piksel antara Pemain dan Musuh, untuk mengelakkan Musuh daripada bergerak berdiri di atas Pemain. Di samping itu, kod sasaran kini menggunakan SideMod untuk menentukan bahagian mana Pemain Musuh itu harus dihidupkan. Jika SideMod positif, kedudukan Enemy akan menjadi PlayerX + PositionRange, dan jika negatif, itu akan menjadi PlayerX - PositionRange.

Kami juga membuat beberapa perubahan pada kenyataan jika. Kenyataan jika kini memeriksa jika Enemy terlalu dekat dengan Pemain, dan terlalu jauh, untuk mengekalkan jarak penyangga yang kami tambah. Kenyataan jika sekarang juga memeriksa sama ada Enemy berada di pihak yang salah pemain jika pemain berpindah. Jadi jika State Enemy adalah PositionFront, dan Pemain bergerak sehingga Enemy berakhir di belakang Pemain, mereka akan mencari posisi sasaran baru.

Sekiranya anda masuk dalam permainan sekarang, Enemies harus berkelakuan dengan cara yang lebih menarik apabila mereka cuba mengelilingi Pemain.

Better Enemy Behavior

Menghadapi Pemain

Itulah peningkatan yang cukup besar, tetapi masih terdapat beberapa isu. Salah satu yang paling jelas adalah jelas jika anda membiarkan Enemies mengelilingi anda beberapa kali, dan ia dapat dilihat dalam imej di atas. Pada asasnya, Musuh tidak menyesuaikan arah yang mereka hadapi berbanding kedudukan Pemain. Oleh itu jika Musuh sedang menghadap ke kiri, dan Pemain berada di sebelah kanan mereka, sebarang serangan yang mereka gunakan akan pergi ke arah yang salah. Ini adalah isu yang mudah untuk diperbaiki, walaupun.

  1. Di OBJ_Enemy, pergi ke Pengguna Ditetapkan 3.
  2. Dalam kod, gantikan kes PositionFront/PositionBehind dengan kod berikut:

Dengan kod asal, Enemy akan sentiasa menghadap ke arah kedudukan Sasaran mereka. Dengan kod baru, Enemy menghadap ke arah kedudukan sasaran mereka apabila mereka jauh, dan mula menghadap ke arah Pemain apabila mereka berada dalam jarak dekat sasaran mereka. Ini memastikan bahawa apabila Enemy menyerang, mereka akan mula menghadap Pemain dan bukannya kedudukan sasaran itu sendiri.

Anda kini perlu melihat peningkatan yang besar apabila anda masuk dalam permainan.

Negeri Perantisan Asas

Perkara sepatutnya bermula bersama, tetapi kita masih mempunyai masalah yang membingungkan. Sekarang, musuh kita tidak mengubah tingkah laku mereka berdasarkan bilangan musuh yang menyerang, atau di mana musuh-musuh lain berdiri.

Ini menjadikannya mudah bagi Enemies mengelilingi Pemain dan mengatasi mereka. Pemain umumnya boleh mengurus tiga hingga empat musuh seperti yang kita ada sekarang, tetapi apa-apa yang lebih daripada itu akan segera keluar dari tangan. Untuk menyelesaikan isu-isu ini, kami akan menambah keadaan baru bernama Giliran.

Keadaan beratur bertindak sebagai keadaan sementara untuk Musuh ketika mereka sedang menunggu persiapan menyerang. Walaupun Musuh sedang beratur, mereka akan relatif dekat dengan Pemain, tetapi mereka tidak akan mendapat cukup dekat untuk benar-benar menyerang sehingga salah satu musuh penyerang mati, atau beralih ke keadaan yang berbeza. Jika anda melihat video di bawah, anda boleh melihat sesuatu seperti ini dalam tindakan:

Dalam video di atas, perhatikanlah tingkah laku Musuh sebelum mereka mula menyerang Pemain. Seperti yang dapat anda lihat, musuh tidak semua mendekati Pemain sehingga Pemain membunuh atau mengetuk kembali Musuh yang sedang mereka lawan. Inilah tingkah laku yang kita mahu tiru dalam permainan kami.

Anda boleh melihat idea umum tentang bagaimana negeri baru kami akan berfungsi dalam rajah Negeri di bawah:

The Enemy State Diagram with Queueing

Untuk membuat sistem ini berfungsi, kita perlu mempunyai barisan, atau senarai, musuh-musuh yang sedang menyerang. Kemudian, apabila Enemy masuk dalam julat tertentu Pemain, mereka boleh melihat senarai itu dan melihat berapa banyak Enemies berada di atasnya. Jika senarai telah dimaksimumkan, mereka akan bertukar ke keadaan Beratur, dan tunggu gilirannya. Sekiranya senarai itu tidak penuh, mereka akan menambah diri mereka ke senarai penyerang, dan terus menghampiri Pemain.

Jadi perkara pertama yang kami perlukan ialah gilirannya sendiri. Saya akan menggunakan ds_list dan menambahnya kepada objek Player.

Jika anda tidak pernah menggunakan objek ds_list sebelum ini, anda boleh mengetahui mengenainya di sini. Untuk meletakkannya semata-mata, walaupun, ds_list adalah versi yang lebih fleksibel daripada array yang memberikan anda fungsi terbina dalam seperti Shuffle, Sort, and Insert, dan ia dapat membuat operasi tertentu sedikit lebih mudah.

  1. Dengan OBJ_Player, pergi ke acara Buat.
  2. Tambahkan kod berikut ke penghujung kod acara yang dibuat:

Kini kita perlu memastikan bahawa Enemies merujuk senarai ini apabila mereka bersedia untuk menyerang. Untuk melakukan ini, kami akan menambah pernyataan jika pada akhir peristiwa Pindah yang memeriksa sama ada senarai musuh penuh apabila mereka berada dalam jarak untuk menambah diri mereka. Sekiranya ia, mereka akan menukar keadaan, dan jika tidak, mereka akan menambah diri mereka ke senarai.

  1. Dengan OBJ_Enemy, pergi ke Pengguna Ditetapkan 5.
  2. Tambah kod berikut pada akhir Peristiwa Move:

Ini jika pernyataan menyemak tiga perkara sebelum menambahkan Musuh ke senarai. Pertama, ia memeriksa sama ada Enemy kurang daripada 200 piksel. Kemudian ia menyemak untuk memastikan senarai itu mempunyai kurang daripada dua Musuh di dalamnya. Akhir sekali, ia menyemak untuk memastikan bahawa mereka tidak lagi dalam senarai. Sekiranya ketiga-tiga perkara itu benar, Enemy akan ditambah ke senarai.

Pada ketika ini, kita juga perlu pergi ke acara perubahan Negeri dan pastikan bahawa Enemy akan beralih ke Negara Beratur jika mereka tidak boleh menyerang.

  1. Dengan OBJ_Enemy, pergi ke Pengguna Ditetapkan 0.
  2. Tambah kes berikut kepada penyataan suis:

Ini jika pernyataan menyemak perkara yang sama seperti yang kami tambah pada peristiwa sebelumnya, kecuali bahawa ia memeriksa jarak, kerana mereka sudah berada di kedudukan PositionFront / PositionBehind. Jika kenyataan jika benar, ia menetapkan keadaan Enemy untuk 'Beratur', dan menetapkan kelajuannya kepada 0.

Sekarang cuba pergi dalam permainan, dan lihat apa yang berlaku apabila anda mendapat perhatian dari ketiga Musuh. Ia sepatutnya bermula dengan cara yang sama seperti sebelum ini, tetapi selepas beberapa saat, salah seorang Enemies sepatutnya berhenti menghampiri Pemain. Ini kerana mereka telah bertukar ke keadaan Beratur, dan tidak lagi diberitahu untuk bergerak ke arah kedudukan sasaran mereka.

Mengubah Negara Beratur

Ini adalah permulaan yang baik, tetapi ada beberapa isu yang perlu kita hadapi. Pertama sekali, jika anda melihat Enemy yang bertukar kepada keadaan Beratur, anda akan melihat bahawa animasi berjalan mereka akan terus bermain walaupun selepas mereka berhenti bergerak.

The Queueing state in action without a unique animation event

Isu ini berlaku kerana keadaan Gilir tidak mempunyai kod animasi tersendiri. Jadi apa jua animasi yang sedang berjalan ketika keadaan Queuing bermula adalah animasi yang akan tinggal di dalamnya sehingga keadaan berubah kepada salah satu yang memicu kod animasi.

Kita boleh membetulkannya dengan menambah kod animasi untuk keadaan baru kita, dan dengan menambah keadaan Gilir ke pernyataan suis dalam peristiwa Langkah.

  1. Di OBJ_Enemy, pergi ke Pengguna Ditetapkan 3.
  2. Pergi ke acara kod, dan tambahkan kes ini ke penyataan suis:

Selain dari satu perubahan kecil, kod animasi ini sama persis dengan kod yang kita ada untuk PositionFront dan PositionBehind. Perbezaannya adalah bahawa kod ini menyebabkan Enemy mula melihat pemain dari jauh lebih jauh daripada dua negeri yang lain. Ini menjadikannya lebih jelas bahawa Enemy memberi tumpuan kepada Pemain, dan bukan hanya bergerak secara rawak.

Akhir sekali, kita perlu menambah satu kes siaran ke pernyataan suis dalam acara Langkah supaya kita dapat memastikan kod animasi akan digunakan.

  1. Di OBJ_Enemy, pergi ke acara Langkah.
  2. Pergi ke acara kod, dan tambahkan kes ini ke penyataan Suis.

Semua kod ini tidak dapat menjalankan acara bernyawa setiap langkah.

Sekarang jika anda masuk dalam permainan, Musuh harus berhenti sepenuhnya ketika mereka beralih ke keadaan Beratur.

Menyambung semula Serangan

Isu berikutnya yang kami ada akan muncul jika anda cuba membunuh salah satu daripada musuh yang menyerang. Tidak kira apa yang berlaku, The Queuing Enemy tidak pernah beralih ke kedudukan PositionFront atau PositionBehind. Walaupun anda membunuh kedua-dua musuh yang menyerang, dan mula menyerang Musuh yang tersisa, mereka akan terus melakukan apa-apa.

Masalah ini disebabkan oleh beberapa faktor. Pertama, Musuh tidak pernah disingkirkan dari senarai penyerang, walaupun mereka mati. Jadi walaupun selepas semua musuh dibunuh, Musuh Beratur tidak akan melihat pembukaan untuk mula menyerang. Selain itu, walaupun Enemies telah dikeluarkan dari senarai, kami tidak mempunyai sebarang kod dalam keadaan keadaan perubahan untuk berurusan dengan keadaan Gilir. Mari kita selesaikan isu ini satu demi satu.

Mula-mula mari kita mulailah Enemies dari senarai penyerang selepas mereka mati. Kita boleh melakukan ini dengan peristiwa Musnah yang menjalankan kod penyingkiran apabila Enemy terbunuh.

  1. Pergi ke OBJ_Enemy objek.
  2. Pilih Tambah Acara> Musnahkan.
  3. Pilih Kuasa > Jalankan Kod.
  4. Tambah kod berikut kepada acara kod:

Kod ini memeriksa untuk mengetahui sama ada Enemy berada dalam senarai penyerang. Jika mereka, ia akan membuangnya dari senarai.

Perkara kedua yang perlu kita lakukan ialah mendapatkan Enemy mencari bukaan. Kita boleh melakukan ini dengan menambahkan kod untuk keadaan yang Dihantarkan ke dalam acara Change State. Kod yang akan kita tambahkan akan melihat senarai penyerang, dan menentukan berapa banyak Musuh di atasnya. Sekiranya senarai itu tidak lengkap, Enemy akan menambah diri mereka ke dalam senarai, dan beralih kepada sama ada 'PositionFront' atau 'PositionBehind', bergantung di mana mereka relatif kepada Pemain.

  1. Di OBJ_Enemy, pergi ke Pengguna Ditetapkan 0.
  2. Pergi ke acara kod, dan tambahkan kes ini ke penyataan suis:

Kod ini tidak betul-betul apa yang saya katakan di atas. Sekiranya senarai Enemy tidak penuh, Enemy akan menambah diri mereka, dan memilih keadaan terbaik berdasarkan kedudukan mereka.

Kini jika anda pergi dalam permainan, anda akan melihat musuh yang sedang lari bertindak dengan betul.

Memisahkan Musuh

Walaupun Negara Beratur kami hampir selesai buat masa ini, ada satu perkara terakhir yang perlu kami lakukan. Jika anda bermain permainan untuk seketika, anda mungkin melihat sesuatu seperti ini berlaku apabila banyak Enemies cuba menyerang anda:

The issue with the Enemy positioning

Masalah di sini adalah bahawa kedua-dua musuh secara rawak memilih keadaan PositionBehind, dan berakhir dengan kedudukan Sasaran yang sangat serupa, sehingga kini pada asasnya berada di atas satu sama lain. Ini menjadikannya sukar bagi pemain untuk melihat berapa banyak musuh yang mereka lawan, dan ia memudahkan pemain untuk mencuba dan melarikan diri atau hanya membunuh kedua-dua musuh pada masa yang sama. Sebaik-baiknya, satu Musuh akan mendekati dari sebelah kiri, dan satu akan mendekati dari kanan.

Untuk menyelesaikan masalah ini, kami akan menambah satu lagi kod untuk acara Change State kami.

  1. Dengan OBJ_Enemy, pergi ke Pengguna Ditetapkan 0.
  2. Tambah kod berikut untuk permulaan pos PostHolder, PositionBehind.

Kod anda sepatutnya kelihatan seperti ini, dengan kod baru yang digariskan dalam warna merah:

The new positioning code for our Enemy

Kod ini mempunyai dua perkara. Pertama, ia memeriksa sama ada terdapat Musuh lain yang terletak di / berhampiran destinasi sasaran. Jika ada, ia beralih dari PositionFront ke PositionBehind, atau sebaliknya.

Perkara penting yang perlu diperhatikan mengenai pemeriksaan ini adalah bahawa kenyataan jika juga mengesahkan bahawa contoh yang ditemui itu bukanlah dirinya sendiri. Ini kerana skrip yang kami gunakan, instance_position (), tidak mempunyai keupayaan untuk mengecualikan dirinya daripada hasilnya.

Pastikan bahawa kod ini datang sebelum kod yang memeriksa sama ada Enemy harus beratur.

Sekarang jika anda pergi dalam permainan untuk mengujinya, anda tidak perlu lagi melihat beberapa musuh yang menyerang dari sisi yang sama.

Walaupun keadaan Giliran kami masih kurang lengkap, dan Enemy AI kami memerlukan beberapa penyesuaian lagi, saya fikir kita harus menukar gear untuk seluruh artikel ini, dan memberi tumpuan kepada sesuatu yang lebih menarik.

Combo Attacks

Serangan kombo adalah ruji bagi setiap permainan tindakan klasik. Melangkah bersama-sama beberapa serangan, dan menggabungkan serangan dengan cara yang unik, terus memerangi menarik melalui banyak peringkat. Jadi, sebelum kita mula menyesuaikan AI lagi, mari kita bina sistem kombo.

Sebelum kita boleh melaksanakan mana-mana Gabung, terdapat dua jenis kombo utama yang perlu anda fahami: Gabung AB dan Gabung A B.

Gabung AB adalah gabungan yang terjadi apabila pemain menggunakan dua atau lebih serangan dalam suatu urutan tertentu, dalam masa yang terhad. Pukulan cahaya, maka pukulan berat dalam penggantian cepat akan menjadi kombo AB.

Gabung A adalah kombo di mana pemain menggunakan dua serangan yang berbeza pada masa yang sama. Pukulan ringan dan pukulan berat pada masa yang sama akan menjadi kombo A B.

Ini juga boleh digabungkan menjadi jenis kombo ketiga, AA B, di mana kombo A B digunakan sebagai salah satu langkah dalam kombo AB. Pukulan cahaya, maka punch cahaya serentak dan pukulan berat akan menjadi contoh jenis ketiga ini.

Kami akan bermula dengan membuat kombo A B.

Membuat Serangan Baru

Untuk mendapatkan kombo kami, kami memerlukan serangan ketiga untuk pemain. Serangan ini akan menjadi Uppercut, dan ia memerlukan dua sprite baru, sprite serangan, dan sprite hitbox. Tambah dua sprites baru untuk permainan, seperti yang dinyatakan di bawah:

Sprite Name

Imej

Asal

SPR_PlayerUppercut

PlayerUppercut1.png, PlayerUppercut2.png, PlayerUppercut3.png, PlayerUppercut4.png, PlayerUppercut5.png

X = 45, Y = 128

SPR_PlayerUppercut_Hitbox

PlayerUppercutHitBox1.png, PlayerUppercutHitBox2.png, PlayerUppercutHitBox3.png, PlayerUppercutHitBox4.png, PlayerUppercutHitBox5.png

X = 45, Y = 128

Mari kita juga mengimport bunyi baru untuk digunakan dengan serangan Ancaman.

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

Seterusnya, kita perlu membuat objek Attack baru. Ikuti langkah-langkah ini untuk membuat Objek Atteckut Attack:

  1. Klik kanan pada folder Objek dan pilih Buat Objek.
  2. Namakan objek ATK_Uppercut.
  3. Tetapkan sprite objek ke SPR_PlayerUppercut_Hitbox.
  4. Tetapkan ibu bapa untuk objek ke OBJ_ATK.
  5. Nyahtandai kotak pilihan Visible.
  6. Klik Tambah Acara> Buat.
  7. Tambah Tindakan kuasa > Kod> Jalankan Kod.
  8. Tambah kod berikut:

Sekarang ini, satu-satunya perbezaan di antara serangan ini dan serangan yang kuat ialah serangan atas yang menghalang musuh untuk sedikit lebih lama. Akhirnya, serangan ini akan menjadi lebih unik dengan kesan mengetuk.

Anda boleh menutup objek ini.

Mengubah Cara Kami Menyerang

Sekarang bahawa kita mempunyai serangan untuk kombo kita untuk mencetuskan, kita perlu mula mengesan apabila combo digunakan. Untuk melakukan ini, kami akan mengubah suai tekan < event > yang kami buat dalam tutorial pertama.

The original Press Any Key event

Sekiranya anda tidak ingat, ujian kod semasa untuk melihat sama ada anda menekan mana-mana butang serangan asas, atau mana-mana butang serangan kuat, dan kemudian menetapkan AttackType anda dengan sewajarnya. Kemudian, jika anda berada di lapangan, ia memanggil Peristiwa Pengguna 2 untuk melaksanakan serangan sebenar.

Sekarang kita hanya mengesan satu butang tekan pada satu masa, tetapi kita perlu mengesan beberapa butang untuk mengendalikan kombo A B. Kita boleh melakukan ini dengan membuat satu lagi jika itu berkata 'jika anda menekan salah satu butang serangan yang kuat, DAN salah satu daripada butang serangan asas, gunakan jalan pintas', tetapi itu akan segera keluar dari tangan. Ketika kami menambahkan lebih banyak serangan, pemeriksaan ini akan menjadi lebih rumit, sukar untuk dibaca sekilas, dan kami akan mempunyai beberapa cek ulang untuk butang yang digunakan dalam beberapa kombinasi.

Jadi, bukannya memeriksa kombinasi butang itu sendiri, setiap butang yang ditekan akan ditambahkan pada rentetan teks. Kemudian kami akan mempunyai kenyataan jika di bahagian bawah yang mengatakan, ''Jika rentetan itu mengatakan 'Up Basic Attack', gunakan pilihan A, dan jika ia mengatakan 'Up Strong Attack', gunakan pilihan B, dan lain-lain ' Dengan cara ini, kita boleh menyemak setiap kali sekali, dan kod tersebut akan lebih mudah dibaca.

Untuk melakukan ini, kita perlu membuat beberapa perubahan. Pertama, kita perlu menambah rentetan yang akan menyimpan senarai butang kami. Kami akan memanggil ButtonCombo berubah ini.

  1. Pergi ke OBJ_Player dan buka tekan event.
  2. Tambahkan baris kod ini pada permulaan acara:

Seterusnya, pada yang pertama jika, tukar kod ini:

Dan tukar kod dalam masa kedua jika ini:

Akhir sekali, tambahkan kod ini sebelum pernyataan jika mengecam sama ada pemain berada di lapangan:

Kod anda sepatutnya kelihatan seperti ini:

The updated Press Any Key event

Keseluruhan kod ini pada dasarnya adalah sama dengan apa yang telah kita ada sebelumnya. Perbezaannya, bukannya jika pernyataan menetapkan AttackType secara langsung, semua yang mereka lakukan adalah menambahkan rentetan unik untuk setiap butang yang ditekan ke akhir butang ButtonCombo. Kemudian, AttackType ditetapkan berdasarkan butang ButtonCombo terakhir. Dengan melakukannya dengan cara ini, rentetan ButtonCombo terakhir yang dinilai adalah gabungan semua butang yang sedang ditekan, dan serangan tersebut didasarkan pada itu, dan bukannya hanya jenis serangan statik berdasarkan butang individu yang ditekan.

Kami juga mempunyai pernyataan string_delete sebelum pernyataan jika yang menetapkan AttackType. Pernyataan ini memadamkan+ tanda dari permulaan butang ButtonCombo untuk meningkatkan kebolehbacaan.

Membuat Combo A + B

Dengan sistem baru ini, jika anda menekan beberapa butang yang diperiksa oleh acara, semuanya akan dipaparkan dalam rentetan. Oleh itu, semua yang anda perlu lakukan untuk menambah kombo AB adalah menambah yang lain / jika blok yang memeriksa serangan baru pada akhir pernyataan jika menentukan AttackType. Sebagai contoh, tambahkan kod berikut ke hujung jika / else yang menetapkan AttackType untuk melaksanakan combo A B untuk Avail:

Kod anda sepatutnya kelihatan seperti ini:

The new ButtonCombo code with Uppercut

Sebelum kita benar-benar boleh mengeksekusi Uppercut, walaupun, kita juga perlu masuk ke Pengguna Ditetapkan 2 dan menambah blok kod ini pada akhir pernyataan jika yang memeriksa apa yang ditetapkan oleh AttackType Player.

Kod anda sepatutnya kelihatan seperti ini:

The modified attack creation code with Uppercut added

Sekiranya anda melakukan semuanya dengan betul, anda boleh masuk ke dalam permainan, dan menggunakan Uppercut dengan menekan butang Punch Asas dan Pong Strong pada masa yang sama.

Membuat Combo AB

Tidak seperti combos A + B, kombo AB memerlukan kita untuk mengetahui sejarah serangan pemain yang digunakan, bukannya yang paling baru.

Untuk mengesan langkah mana yang telah digunakan, kami akan membuat apa yang saya panggil Senarai Perintah. Senarai Perintah akan menjadi objek ds_list yang menjejaki butang X ButtonCombo terakhir. Setiap kali kita menggunakan langkah, semua yang kita perlu lakukan ialah melihat arahan paling terkini dalam senarai, dan periksa sama ada mereka sepadan dengan mana-mana kombo kami. Ini sama dengan apa yang kita lakukan sekarang, hanya kita akan melihat rentetan beberapa butang ButtonCombo lalu, bukannya yang paling baru.

Oleh itu sebelum kita dapat menubuhkan Combo baru kita, kita perlu membuat objek Serangan baru. Import aset berikut untuk serangan baru:

Nama Sprite Imej Origin
SPR_PlayerTriplePunch PlayerTriplePunch1.png, PlayerTriplePunch2.png, PlayerTriplePunch3.png, PlayerTriplePunch4.png, PlayerTriplePunch5.png X = 46, Y = 129
SPR_PlayerTriplePunch_HitBox PlayerTriplePunchHitBox1.png, PlayerTriplePunchHitBox2.png, PlayerTriplePunchHitBox3.png, PlayerTriplePunchHitBox4.png, PlayerTriplePunchHitBox5.png X = 46, Y = 129

Mari juga mengimport bunyi baru untuk digunakan dengan kombo baru.

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

Akhirnya, kita perlu membuat objek Serangan baru. Serangan baru ini akan dipanggil Punch tiga:

  1. Klik kanan pada folder Objek dan pilih Buat Objek.
  2. Namakan objek ATK_TriplePunch.
  3. Tetapkan sprite objek ke SPR_PlayerTriplePunch_Hitbox.
  4. Tetapkan ibu bapa untuk objek ke OBJ_ATK.
  5. Nyahtandai kotak pilihan Visible.
  6. Klik Tambah Acara> Buat.
  7. Tambah Tindakan kuasa > Kod> Jalankan Kod.
  8. Tambah kod berikut:

Oleh itu, serangan ini akan sedikit lebih kuat daripada serangan ringan standard, dan dapat ditahan untuk tempoh yang lebih lama.

Sekarang kita mempunyai serangan baru kita, kita boleh mula mengubah suai kod serangan untuk melaksanakan Senarai Perintah. Untuk bermula, kita perlu menambah CommandList objek.

  1. Dengan OBJ_Player, pergi ke Buat Acara.
  2. Tambahkan kod berikut pada akhir acara:

Itulah yang perlu kita buat untuk membuat senarai kami.

Seterusnya kita perlu menyatukan senarai ke dalam sistem pertempuran kita.

  1. Dengan OBJ_Player, pergi ke press < any key > event.
  2. Ganti baris string_delete, dan if / else if statement yang menetapkan AttackType, dengan kod berikut:

Kod ini sangat serupa dengan apa yang telah kita ada sebelumnya. Pertama, ia menambah rentetan ButtonCombo ke CommandList. Kemudian, kerana saya mengehadkan panjang kombo maks saya kepada tujuh arahan, ia menyemak untuk memastikan bahawa senarai arahan adalah kurang dari atau sama dengan tujuh item yang panjang, dan memadam sebarang item tambahan dalam senarai. Akhir sekali, pernyataan jika melihat item paling terkini dalam senarai dengan cara yang sama ia melihat ButtonCombo, dan menentukan AttackType.

Jika anda menguji permainan anda sekarang, ia sepatutnya berfungsi dengan betul seperti yang dilakukan sebelum kami menambah CommandList.

Perlu diingat bahawa anda boleh menggunakan mana-mana nombor yang anda inginkan untuk panjang kombo maks. Saya memilih tujuh kerana ia kelihatan seperti pilihan yang baik kepada saya, tetapi jika anda mahu permainan anda mempunyai 10, 20, atau bahkan 100 tindakan gabungan, anda boleh melakukannya, dan kod itu berfungsi dengan baik. Secara peribadi, saya cadangkan anda meningkatkannya seperti yang diperlukan apabila anda membuat kombo baru, dan bukannya cuba menjangkakan apa yang anda perlukan terlebih dahulu.

Kini semua yang perlu kita lakukan untuk membuat kombo AB membuat cek yang melihat banyak item dalam senarai, bukan hanya satu. Oleh itu, katakan saya ingin menambahkan pukulan tiga saya dan membuatnya supaya anda perlu melakukan tiga LightPunches berturut-turut untuk melaksanakannya. Untuk membuat kerja itu, anda perlu memasukkan blok kod ini ke permulaan jika / lain jika pernyataan yang menetapkan AttackType:

Apabila menambahkan semakan ini ke permainan anda, pastikan anda meletakkannya pada permulaan jika / lain jika kenyataan. Sekiranya anda tidak, dan anda meninggalkannya pada akhirnya, satu atau kedua pemeriksaan butang individu akan menilai benar sebelum ia mendapat cek kombo AB, dan kombo tidak akan berjaya. Jadi, anda mengubah jika / jika anda sepatutnya kelihatan seperti ini:

The updated code to detect AB combos

Oleh itu, ingatlah, apabila anda membuat kombo AB baru, lebih banyak butang yang diperlukan untuk melaksanakan kombo, lebih awal ia sepatutnya dalam kenyataan jika / lain jika. Jika anda meletakkan kombo AB di bahagian bawah, ia hampir tidak akan dapat dilaksanakan.

Juga ingat bahawa butang ButtonCombo ditambah ke senarai pada akhir. Ini bermakna bahawa arahan yang paling baru digunakan ialah item terakhir dalam senarai, bukan yang pertama. Oleh itu, jika kombo adalah LAtk, SAtk, LAtk akan berada di kedudukan Size-2, dan SAtk berada dalam kedudukan Size-1.

Akhir sekali, kita perlu kembali kepada Pengguna Ditetapkan 2 dan menambah pernyataan untuk membuat Triple Punch. Masuk ke Pengguna Ditakrifkan 2, dan tambah blok kod ini pada akhir pernyataan jika yang memeriksa apa yang ditetapkan oleh AttackType Player.

Kini jika anda masuk dalam permainan dan menggunakan tiga Punches Light berturut-turut, anda harus berjaya melaksanakan Triple Punch.

Mengosongkan Senarai Perintah

Akhirnya, kita perlu membersihkan Senarai Perintah kami jika pemain mengambil masa terlalu lama untuk meneruskan kombo. Sekarang, selagi anda menggunakan tiga pukulan asas berturut-turut, anda akan melaksanakan pukulan tiga. Walaupun terdapat jeda selama dua detik antara setiap punch, ia tidak akan membuat apa-apa perbezaan. Ini sangat mengurangkan kemahiran yang diperlukan untuk melaksanakan kombo yang kuat, jadi kita perlu menambah sistem yang menetapkan semula CommandList selepas tempoh tertentu. Kami akan menggunakan penggera untuk mencapai ini.

Untuk membuat penggera, ikuti langkah berikut:

  1. Di OBJ_Player, pergi ke Tambah Acara> Penggera> Penggera 0.
  2. Tambah Tindakan kuasa > Kod> Jalankan Kod.
  3. Tambah kod berikut:

Semua kod ini tidak jelas dengan CommandList sepenuhnya apabila Penggera dimatikan.

Seterusnya, kita perlu pergi ke akhbar event, dan tambah kod untuk mencetuskan penggera ini selepas kod yang menambah butang ButtonCombo ke CommandList, tetapi sebelum pernyataan Sementara. Anda dapat melihat dengan tepat di mana ia harus pergi dalam gambar di bawah:

The position where you should place the Alarm code

Tambah kod berikut ke lokasi tersebut di press< any key > event:

Kod ini memulakan penggera dan menetapkannya kepada 10 langkah, atau kitaran permainan. Jika 10 langkah berlalu sebelum pemain menekan butang baru, CommandList membersihkan; sebaliknya, kombo boleh diteruskan.

Jika anda pergi dalam permainan dan menguji kombo sekarang, anda akan melihat bahawa ia hanya berfungsi jika anda menekan butang dalam penggantian yang agak cepat.

Meningkatkan bilangan langkah akan membuat comboing lebih mudah, dan mengurangkan ia akan membuat comboing lebih keras. Saya rasa 10 adalah pilihan yang baik, tetapi anda perlu mencari tahap cabaran yang tepat untuk permainan anda. Gabung anda mungkin sangat rumit, jadi anda boleh membuat keputusan untuk memberi pemain lebih banyak masa untuk menyelesaikannya. Jika anda benar-benar mahu mengurangkan masa, anda juga boleh melakukannya, tetapi permainan anda akan menjadi lebih mencabar untuk pemain biasa dengan setiap langkah yang anda tolak.

Membuat Pickup

Perkara terakhir yang akan kita lihat dalam artikel ini ialah Pickups. Tidak ada perompak atau platformer lengkap tanpa power-up dan pickup kesihatan. Apabila pemain berada dalam situasi yang mengerikan, tidak ada apa yang mereka suka lebih daripada mendapatkan pickup makanan secara rawak, atau tersandung pada kuasa rahsia. Membuat pikap dasar sebenarnya sangat mudah, tetapi sebelum kami dapat melakukannya, kami perlu mengimpor sprite untuk digunakan untuk pengambilan kami.

Sprit keceriaan ini akan digunakan untuk objek pickup orang tua dan pickup makanan yang akan kami buat kemudian.

Nama Sprite

Imej

Kedudukan Asal

SPR_Food_Cherry

FoodCherry.png

X = 13, Y = 47

Mari kita juga mengimport bunyi baru apabila Player mendapat pickup makanan.

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

Seterusnya kami akan membuat objek induk kami.

  1. Klik kanan folder Objek dan pilih Objek Sisip.
  2. Namakan objek baru OBJ_Pickup.
  3. Tetapkan sprite objek ke SPR_Food_Cherry.
  4. Gunakan Tambah Acara> Buat.
  5. Di bawah kuasa tab, tambah tindakan Kod Pelaksanaan.
  6. Tambah kod berikut:

Kod ini menetapkan kedalaman pikap di dunia permainan dengan cara yang sama yang kami tetapkan kedalaman Player dan Enemy sebelum ini. Ia juga menambah pemboleh ubah untuk menyimpan bunyi yang akan dibuat apabila kita mengumpul makanan, dengan cara yang sama kita mempunyai pembolehubah untuk menyimpan bunyi serangan melanda dan ketinggalan.

Seterusnya, kami akan menambah peristiwa perlanggaran supaya pemain benar-benar boleh mendapatkan pengambilan dalam permainan.

  1. Dengan OBJ_Pickup, gunakan Tambah Acara> Perlanggaran> OBJ_Player.
  2. Di bawah kuasa tab, tambah tindakan Kod Pelaksanaan.
  3. Tambah kod berikut:

Ini jika menyemak sama ada pickup dan pemain cukup dekat untuk berinteraksi dengan hampir sama cara kita menyemak pelanggaran dengan objek serangan. Sekiranya mereka berada, pickup menjalankan Pengguna Acara 0 dan memusnahkan dirinya sendiri. Peristiwa Pengguna 0 adalah di mana kita akan meletakkan kod yang berlaku apa-apa kesan pickup yang ada. Dengan meletakkan kod untuk kesan pikap ke dalam acara yang berasingan, kami boleh mengubah suai kesan apa-apa piksel baru yang kami tambah kemudian, tanpa perlu mengubah kod perlanggaran.

Sekarang kita hanya perlu menambah beberapa kod pemegang tempat untuk Acara Pengguna 0, dan pickup harus berfungsi dengan sempurna.

  1. Gunakan Tambah Acara> Lain-lain> Peristiwa Pengguna 0.
  2. Di bawah kuasa tab, tambah tindakan Kod Pelaksanaan.
  3. Tambah kod berikut:

Kod ini semata-mata sebagai pemegang tempat kerana pickup asas sebenarnya tidak melakukan apa-apa.

Jika anda meletakkan pickup di peringkat anda dan pergi dalam permainan, anda akan melihat ia hilang, dan mendengar audio pickup, apabila anda bertembung dengannya.

Walaupun kita boleh bergerak ke pickup sebenar pertama segera, mari kita memberi bongkah asas bayangan seperti yang kita lakukan untuk Pemain dan Musuh. Dengan cara ini ia sesuai dengan gaya visual sedia ada permainan.

  1. Gunakan Tambah Acara> Gambar.
  2. Di bawahkuasa tab, tambah tindakan Kod Pelaksanaan.
  3. Tambah kod berikut:

Kod ini melakukan perkara yang sama seperti kod bayangan untuk objek lain. Pertama, ia menetapkan alpha kepada .6 dan menetapkan warna menjadi kelabu gelap, kemudian ia menarik elips untuk bayang-bayang. Selepas itu, ia menarik coretan sebenar pikap.

Membuat Pengambilan Makanan

Sekarang bahawa pengambilan asas kami berfungsi, mari kita buat versi makanan.

  1. Klik kanan folder Objek dan pilih Objek Sisip.
  2. Namakan objek baru PKP_Food.
  3. Tetapkan sprite objek ke SPR_Food_Cherry.
  4. Tetapkan Ibu Bapa kepada OBJ_Pickup.
  5. Gunakan Tambah Acara> Buat.
  6. Di bawah kuasa tab, tambah tindakan Kod Pelaksanaan.
  7. Tambah kod berikut:

Kod ini mewarisi sifat kelas asas untuk menetapkan kedalamannya, dan ia mewujudkan pembolehubah HealAmount yang menentukan kekuatan keupayaan penyembuhan pikap.

Kini kami akan masuk ke Acara Pengguna 0, dan menambah kod yang benar-benar menyembuhkan Pemain apabila mereka mendapat makanan.

  1. Gunakan Tambah Acara> Lain-lain> Peristiwa Pengguna 0.
  2. Di bawah kuasa tab, tambah tindakan Kod Pelaksanaan.
  3. Tambah kod berikut:

Semua ini adalah menambah HealAmount ke HP Pemain.

Sebelum anda menguji ini, pastikan anda memadamkan pengambilan asal di peringkat dan menggantikannya dengan objek makanan.

Kini pergi dalam permainan untuk menguji Pengambilan Makanan, dan anda harus melihat sesuatu yang menarik. Semasa pickup menyembuhkan pemain, ia sebenarnya menolak kesihatannya melewati pinggir bar kesihatan. Ini berlaku kerana kami tidak melakukan apa-apa untuk menghalang CurrentHP Player daripada melebihi MaxHP mereka.

Kembali ke Acara Pengguna 0 dalam pickup makanan, dan gantikan baris kod yang ada dengan kod berikut:

Perbezaan di antara versi ini dan versi asal kod adalah bahawa ini menggunakan pernyataan min untuk menetapkan kesihatan Pemain kepada yang lebih rendah dari kedua nilai tersebut. Jadi jika CurrentHp + HealAmount kurang daripada MaxHP mereka, ia akan menetapkan CurrentHP mereka untuk itu; jika tidak, ia akan menetapkannya kepada MaxHP mereka, dan menghalangnya daripada mencapai nilai itu.

Untuk menguji versi baru ini, anda harus menunggu sehingga Pemain telah merosakkan menggunakan pickup. Cuba membiarkan diri anda terluka oleh musuh sebelum mendapatkan makanan, dan melihat apa yang berlaku. Anda harus melihat bahawa tidak kira betapa sedikit kerosakan yang telah anda ambil, atau apa yang anda tetapkan HealAmount ke, HP anda tidak melampaui Maksimum.

Membuat Pickup Cherry

Akhir sekali, mari kita ubah objek PKP_Food ke kelas induk juga, dengan membuat pickup Cherry. Dengan cara ini, anda boleh mempunyai pelbagai pilihan makanan yang berbeza seperti yang anda mahu, dengan melanjutkan kelas asas dengan objek baru.

  1. Klik kanan folder Objek dan pilih Objek Sisip.
  2. Namakan objek baru PKP_FOOD_Cherry.
  3. Tetapkan sprite objek ke SPR_Food_Cherry.
  4. Tetapkan Ibu Bapa kepada PKP_Food.
  5. Gunakan Tambah Acara> Buat.
  6. Di bawah kuasa tab, tambah tindakan Kod Pelaksanaan.
  7. Tambah kod berikut:

Kini anda boleh menggantikan jisim makanan generik dengan ceri yang baru kami buat, dan ia harus berfungsi dengan sempurna dalam permainan.

Kesimpulan

Dengan itu, kita akan berhenti untuk hari itu. Pastikan anda kembali untuk artikel seterusnya, di mana kami akan memuktamadkan gerakan Enemy dan Player, dan melaksanakan beberapa ciri baru.

Sementara itu, jangan teragak-agak untuk bertanya kepada saya apa-apa soalan atau meninggalkan sebarang komen dalam suapan di bawah.

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.