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

Mesin Finite-State: Pola Squad Menggunakan Kelakuan Berkendara

by
Difficulty:IntermediateLength:LongLanguages:

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

Mesin status hujung dan kelakuan stereng adalah padanan yang sempurna: sifat dinamik mereka membolehkan kombinasi keadaan mudah dan daya untuk membuat corak tingkah laku yang kompleks. Dalam tutorial ini, anda akan belajar bagaimana untuk mengodkan corak skuad menggunakan mesin terhingga berasaskan stack yang digabungkan dengan kelakuan stereng.

Semua ikon FSM yang dibuat oleh Lorc dan boleh didapati di http://game-icons.net. Aset dalam demo: Top / Down Shoot 'Em Up Spritesheet oleh takomogames dan Alien Breed (esque) Tilesheet Top-Down oleh SpicyPixel.

Nota: Walaupun tutorial ini ditulis menggunakan AS3 dan Flash, anda harus menggunakan teknik dan konsep yang sama dalam hampir semua persekitaran pembangunan permainan.


Keputusan akhir

Selepas menyelesaikan tutorial ini, anda akan dapat melaksanakan corak skuad di mana sekumpulan tentera akan mengikut pemimpin, memburu musuh dan barang rompakan:


Corak skuad yang dilaksanakan dengan FSM berasaskan timbunan dan kelakuan stereng. Gerakkan kursor tetikus untuk membimbing pemimpin dan klik untuk menembak.

Menggabungkan FSM berasaskan Stack dan Kelakuan Berkemahiran

Tutorial sebelumnya mengenai mesin terhingga menyatakan betapa bergunanya mereka untuk melaksanakan logik kecerdasan buatan: bukannya menulis tumpukan kod AI yang sangat kompleks, logik itu boleh tersebar di sekeliling keadaan mudah, masing-masing melakukan tugas yang sangat spesifik, seperti melarikan diri dari musuh.

Gabungan negara menghasilkan AI yang canggih, namun mudah difahami, tweak dan mengekalkan. Struktur itu juga merupakan salah satu tiang di belakang kelakuan stereng: kombinasi daya mudah untuk membentuk pola yang kompleks.

Itulah sebabnya FSM dan tingkah laku stereng membuat kombinasi hebat. Negeri-negeri boleh digunakan untuk mengawal kuasa mana yang akan bertindak atas watak, memperbaiki corak pola yang sudah kuat yang boleh dibuat menggunakan kelakuan stereng.


Mengendalikan Kelakuan Menggunakan FSM Berbasis Stack

Untuk mengatur semua tingkah laku, mereka akan tersebar di seluruh negeri. Setiap negeri akan menghasilkan daya tingkah laku tertentu, atau satu set mereka, seperti mencari, melarikan diri, dan mengelakkan perlanggaran.

Apabila keadaan tertentu aktif, hanya daya yang dihasilkan akan digunakan pada watak, menjadikannya bersikap sewajarnya. Sebagai contoh, jika status yang sedang aktif adalah runAway dan pasukannya adalah gabungan dari melarikan diri dan mengelakkan pertembungan, watak itu akan melarikan diri sementara collision avoidance sebarang halangan.

Pasukan pemanduan dikira setiap kemas kini permainan, dan kemudian ditambah ke vektor halaju watak. Akibatnya, apabila keadaan aktif berubah (dan dengan itu corak pergerakan), watak akan lancar peralihan ke corak baru apabila daya baru ditambah selepas setiap kemas kini.

Sifat dinamik kelakuan stereng memastikan peralihan bendalir ini; negeri-negeri hanya menyelaras pasukan stereng yang aktif pada bila-bila masa.


Struktur Kod

Struktur untuk melaksanakan corak skuad akan merangkumi FSM dan tingkah laku stereng dalam sifat kelas. Mana-mana kelas yang mewakili entiti yang bergerak atau sebaliknya dipengaruhi oleh daya stereng akan mempunyai harta yang disebut boid, yang merupakan contoh kelas Boid:

Kelas Boid digunakan dalam siri kelakuan stereng dan menyediakan sifat sebagai halaju dan kedudukan (kedua vektor matematik), bersama-sama dengan kaedah untuk menambah daya stereng, seperti mencari (), melarikan diri (), dan sebagainya.

Sebuah entiti yang menggunakan FSM berasaskan timbunan akan mempunyai struktur Ant yang sama dari kelas tutorial FSM terdahulu: FSM yang berasaskan stack dikendalikan oleh harta brain dan setiap negeri dilaksanakan sebagai kaedah.

Berikut adalah kelas Askar, yang mempunyai kelakuan stereng dan keupayaan FSM:


Merancang "Otak"

Corak skuad akan dilaksanakan menggunakan mesin terhingga berdasarkan keadaan terhingga. Tentera, yang merupakan anggota skuad, akan mengikut pemimpin (dikawal oleh pemain), memburu mana-mana musuh yang berdekatan.

Apabila musuh mati, ia mungkin menjatuhkan item yang boleh menjadi baik atau buruk (medkit atau badkit, masing-masing). Seorang askar akan memecahkan pembentukan skuad dan mengumpul barang-barang yang berdekatan, atau akan mengelakkan tempat itu untuk mengelakkan sebarang perkara buruk.

Di bawah ini adalah representasi grafik dari FSM berasaskan stack yang mengawal "otak" askar:


FSM mewakili otak seorang askar.

Bahagian seterusnya membentangkan pelaksanaan setiap negeri. Semua coretan kod dalam tutorial ini menerangkan idea utama setiap langkah, tidak memasukkan semua spesifik mengenai enjin permainan yang digunakan (Flixel, dalam kes ini).


Berikutan Pemimpin

Negeri pertama yang akan dilaksanakan adalah yang akan terus aktif hampir sepanjang masa: ikut pemimpin. Bahagian rompakan itu akan dilaksanakan kemudian, jadi untuk sekarang keadaan berikut hanya akan membuat askar mengikuti pemimpin, menukar keadaan sekarang untuk memburu jika ada musuh yang berdekatan:

Walaupun kehadiran musuh-musuh, sementara negeri itu aktif, ia akan sentiasa menjana daya untuk mengikuti pemimpin, menggunakan pemimpin berikut tingkah laku.

Sekiranya getNearestEnemy () mengembalikan sesuatu, itu bermakna ada musuh di sekelilingnya. Dalam hal ini, keadaan memburu ditumpangkan ke dalam timbunan melalui panggilan brain.pushState (berburu), membuat tentara berhenti mengikuti pemimpin dan memulakan memburu musuh.

Buat masa ini, pelaksanaan keadaan memburu () itu hanya dapat muncul sendiri dari timbunan, dengan cara itu tentera tidak akan terperangkap di negara memburu:

Perhatikan bahawa tidak ada maklumat yang diteruskan ke negara berburu, seperti siapa musuh terdekat. Maklumat itu mesti dikumpulkan oleh negara memburu itu sendiri, kerana ia menentukan sama ada perburuan itu harus tetap aktif atau pop sendiri dari timbunan (mengembalikan kawalan ke keadaan berikut).

Hasilnya sejauh ini adalah skuad tentera yang mengikuti pemimpin (perhatikan bahawa tentera tidak akan memburu kerana kaedah berburu () hanya muncul sendiri):


Corak skuad dengan "mengikuti" dan tidak berfungsi 'memburu' negeri. Gerakkan kursor tetikus untuk membimbing pemimpin dan klik untuk menembak.

Petua: setiap negeri harus bertanggungjawab untuk menamatkan kewujudannya dengan muncul dari timbunan.


Breaking Formation and Hunting

Negeri seterusnya yang akan dilaksanakan adalah memburu, yang akan membuat tentera memburu mana-mana musuh yang berdekatan. Kod untuk memburu () ialah:

Negeri bermula dengan memberikan aNearestEnemy dengan musuh terdekat. Jika aNearestEnemy adalah batal ia bermakna tidak ada musuh di sekelilingnya, jadi keadaan mesti berakhir. Panggilan brain.popState () muncul keadaan berburu, menukar tentera ke keadaan seterusnya dalam timbunan.

Sekiranya aNearestEnemy tidak batal, ia bermakna ada musuh yang diburu dan kerajaan harus tetap aktif. Algoritma memburu adalah berdasarkan jarak antara askar dan musuh: jika jarak lebih dari 80, tentara akan mencari posisi musuh; Sekiranya jarak kurang dari 80, askar akan menghadapi musuh dan menembak ketika berdiri diam.

Sejak memburu () akan digunakan setiap kemas kini permainan, jika musuh berada di sekitar maka tentara akan mencari atau menembak musuh itu. Keputusan untuk bergerak atau menembak dikawal secara dinamik oleh jarak antara askar dan musuh.

Hasilnya adalah skuad tentera yang dapat mengikuti pemimpin dan memburu musuh berhampiran:


Corak skuad dengan "mengikuti" dan "memburu". Gerakkan kursor tetikus untuk membimbing pemimpin dan klik untuk menembak.

Perebutan dan Running Away

Setiap kali musuh terbunuh, ia mungkin menjatuhkan barang. Askar mesti mengumpul item itu jika ia adalah yang baik, atau melarikan barang jika ia buruk. Tingkah laku itu diwakili oleh dua negeri dalam FSM yang telah diterangkan sebelumnya:


FSM menonjolkan koleksi collectItem dan runAway.

Negara collectItem akan membuat seorang askar tiba di item yang dijatuhkan, sementara keadaan runAway akan membuat tentera melarikan diri dari lokasi item yang buruk. Kedua-dua negeri hampir sama, satu-satunya perbezaan ialah kedatangan atau melarikan diri:

Di sini pengoptimuman mengenai peralihan datang berguna. Kod peralihan dari negeri berikut kepada collectItem atau negeri runAway adalah sama: periksa sama ada terdapat item di dekatnya, kemudian tekan keadaan baru.

Negeri yang ditekan bergantung kepada jenis item. Akibatnya peralihan untuk mengumpulItem atau runAway boleh dilaksanakan sebagai satu kaedah, bernama checkItemsNearby ():

Kaedah ini memeriksa item yang terdekat. Sekiranya ia baik, keadaan collectItem didorong ke dalam otak; jika ia satu yang buruk, negeri runAway ditolak. Sekiranya tidak ada item untuk dikumpulkan, kaedah tidak ada apa-apa.

Pengoptimuman itu membolehkan penggunaan checkItemsNearby () untuk mengawal peralihan dari mana-mana negeri untuk mengumpul Item atau runAway. Menurut askar FSM, peralihan itu ada di dua negeri: mengikuti dan berburu.

Pelaksanaan mereka boleh sedikit berubah untuk menampung peralihan yang baru:

Semasa mengikuti pemimpin, seorang askar akan memeriksa barangan berdekatan. Ketika memburu musuh, seorang tentara juga akan memeriksa barang-barang yang berdekatan.

Hasilnya adalah demo di bawah. Perhatikan bahawa seorang askar akan cuba untuk mengumpul atau mengelakkan item pada bila-bila masa ada satu di dekatnya, walaupun ada musuh untuk memburu dan pemimpin untuk diikuti.


Corak skuad dengan''mengikuti'', ''memburu'', ''collectItem'' dan''runAway''. Gerakkan kursor tetikus untuk membimbing pemimpin dan klik untuk menembak.

Mengutamakan negara dan peralihan

Aspek penting mengenai negeri dan peralihan adalah keutamaan di kalangan mereka. Bergantung pada garis di mana peralihan diletakkan dalam pelaksanaan negara, keutamaan perubahan peralihan itu.

Menggunakan keadaan berikut dan peralihan yang dibuat oleh checkItemsNearby () sebagai contoh, periksa pelaksanaan berikut:

Versi susulan () akan membuat suis tentera untuk mengumpulItem atau runAway sebelum memeriksa sama ada terdapat musuh. Akibatnya, askar akan mengumpul (atau melarikan diri) dari item walaupun ada musuh di sekitar yang harus diburu oleh keadaan berburu.

Inilah satu lagi pelaksanaan:

Versi berikut () akan membuat suis tentera untuk mengumpulItem atau runAway hanya selepas dia mendapati bahawa tidak ada musuh untuk membunuh.

Pelaksanaan berikut (), memburu () dan collectItem () mengalami masalah utama. Askar akan cuba mengumpulkan item walaupun ada perkara yang lebih penting untuk dilakukan. Untuk menyelesaikannya, beberapa tweak diperlukan.

Mengenai keadaan berikut, kod tersebut boleh dikemas kini kepada:

(ikuti () dengan keutamaan)

Negara memburu mesti ditukar kepada:

Akhirnya, negara collectItem mesti ditukar untuk membatalkan apa-apa rompakan jika ada musuh di sekelilingnya:

Hasil dari semua perubahan itu adalah demo dari permulaan tutorial:


Corak skuad yang dilaksanakan dengan FSM berasaskan timbunan dan kelakuan stereng. Gerakkan kursor tetikus untuk membimbing pemimpin dan klik untuk menembak.

Kesimpulan

Dalam tutorial ini, anda belajar bagaimana untuk kod pola skuad di mana sekumpulan tentera akan mengikut pemimpin, memburu dan merampas musuh berhampiran. AI dilaksanakan menggunakan FSM berasaskan stack yang digabungkan dengan beberapa kelakuan stereng.

Seperti yang ditunjukkan, mesin terhingga dan perlengkapan stereng adalah gabungan yang kuat dan perlawanan yang hebat. Menyebarkan logik ke atas negara-negara FSM, mungkin untuk memilih kuasa mana yang akan bertindak ke atas watak, membolehkan penciptaan corak AI yang kompleks.

Menggabungkan tingkah laku stereng yang sudah anda ketahui dengan FSM dan buat corak yang baru dan luar biasa!

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.