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

Memahami Perilaku Mengarahkan: Langkah Manajer

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Understanding Steering Behaviors.
Understanding Steering Behaviors: Pursuit and Evade
Understanding Steering Behaviors: Collision Avoidance

Indonesian (Bahasa Indonesia) translation by Wasmia Mia (you can also view the original English article)

Perilaku mengarahkan penting untuk menciptakan pola gerakan realistis, tetapi mereka lebih baik jika Anda dapat mengontrolnya, menggunakan dan menggabungkan mereka dengan mudah. Dalam tutorial ini, saya akan membahas dan memeparkan pelaksanaan gerakan manajer untuk semua pembahasan perilaku kami sebelumnya.

Catatan: Meskipun tutorial ini ditulis menggunakan AS3 dan Flash, Anda harus dapat menggunakan teknik dan konsep yang sama di hampir setiap lingkungan pengembangan game. Anda harus memiliki pemahaman dasar tentang matematika vektor.


Menggbungkan Pasukan Penggerak

Seperti dibahas sebelumnya, perilaku setiap kemudi menghasilkan kekuatan yang dihasilkan (disebut "kekuatan kemudi") yang ditambahkan ke vektor kecepatan. Arah dan besarannya yang memaksa akan mengarahkan karakter, sehingga bergerak sesuai pola (mencari, melarikan diri, mengembara dan seterusnya). Perhitungan umum adalah:

Karena Angkatan kemudi vektor, dapat ditambahkan untuk setiap vektor lainnya (seperti kecepatan). Namun "magic" yang sebenarnya terletak pada kenyataan bahwa Anda dapat menambahkan beberapa kekuatan kemudi bersama-sama - ini yang sederhana seperti:

Pasukan kemudi gabungan akan mengakibatkan vektor yang mewakili semua kekuatan mereka. Dalam potongan kode di atas, yang dihasilkan kemudi force akan membuat karakter mencari sesuatu sementara pada saat yang sama itu akan melarikan diri sesuatu yang lain.

Periksa di bawah ini beberapa contoh kemudi kekuatan dikombinasikan untuk menghasilkan kekuatan kemudi tunggal:

Steering forces combined to produce a single steering force
Kombinasi Kemudi Pasukan.

Menyederhanakan Pola Kompleks

Kombinasi dari steering pasukan akan menghasilkan pola pergerakan sangat kompleks dengan mudah. Bayangkan betapa sulitnya menulis kode untuk membuat karakter yang mencari sesuatu, tetapi pada saat yang sama menghindari area tertentu, tanpa menggunakan vektor dan kekuatan?

Ini akan memerlukan perhitungan jarak, Area, jalan, grafik, dan sejenisnya. Jika hal-hal bergerak di sekitar, semua perhitungan tersebut harus diulang setiap saat dan seterusnya, karena lingkungan berubah terus-menerus.

Dengan mengemudikan perilaku, semua kekuatan dinamis. Mereka dimaksudkan untuk menjadi dihitung pada setiap update permainan, sehingga mereka akan secara alami dan mulus bereaksi terhadap perubahan lingkungan.

Demo di bawah menunjukkan kapal-kapal yang akan mencari kursor mouse, tetapi akan melarikan diri pusat layar, keduanya pada saat yang sama:


Kapal-kapal akan mencari kursor mouse (abu-abu), tetapi akan melarikan diri pusat layar (oranye). Klik untuk menunjukkan kekuatan.

Mengatur Gerakan

Untuk menggunakan beberapa perilaku kemudi pada saat yang bersamaan dalam cara yang sederhana dan mudah, sebuah pengaturan gerakan menjadi berguna. Idenya adalah untuk menciptakan sebuah "kotak hitam" yang dapat dipasang ke entitas yang ada, sehingga mampu melakukan perilaku.

Manajer memiliki referensi ke entitas yang dihubungkan ke ("host"). Manajer akan memberikan host dengan seperangkat metode, seperti seek() dan flee(). Setiap kali metode tersebut dipanggil, manajer pembaruan sifat internal menghasilkan vektor kekuatan kemudi.

Setelah pengaturan memproses semua invokasi, itu akan menambah kekuatan kemudi untuk kecepatan vektor  host yang dihasilkan. Itu akan mengubah kecepatan host vektor besarnya dan arah menurut perilaku aktif.

Gambar di bawah ini menunjukkan arsitektur:

Movement manager: plugin architecture.
Pengaturan gerakan: arsitektur plugin.

Membuat Hal-hal Umum

Pengaturan memiliki satu set metode, masing-masing mewakili sebuah perilaku yang berbeda. Setiap perilaku harus dipasok dengan potongan-potongan informasi eksternal yang berbeda untuk bekerja.

Mencari perilaku, misalnya, membutuhkan titik dalam ruang yang digunakan untuk menghitung Angkatan kemudi menuju tempat itu; mengejar kebutuhan beberapa potongan informasi dari target, seperti posisi dan kecepatan saat ini. Titik di ruang dapat dinyatakan sebagai contoh Point atau Vector2D, keduanya cantik common kelas di setiap kerangka.

Target digunakan dalam mengejar perilaku, bagaimanapun, bisa apa saja. Untuk membuat gerakan manajer cukup generik, yang dibutuhkan untuk menerima target, terlepas dari jenis, mampu menjawab beberapa "pertanyaan", seperti "Apa kecepatan Anda saat ini?". Menggunakan beberapa prinsip-prinsip berorientasi objek pemrograman, itu dapat dicapai dengan interfaces.

Dengan asumsi antarmuka IBoid menggambarkan suatu entitas yang mampu ditangani oleh Manajer gerakan, setiap kelas dalam game dapat menggunakan kemudi perilaku, selama menerapkan IBoid. interface yang memiliki struktur sebagai berikut:


Struktur Pengaturan Gerakan

Sekarang manajer dapat berinteraksi dengan semua entitas game dalam cara yang generik, struktur dasar dapat dibuat. Manajer terdiri dari dua sifat (yang dihasilkan kemudi kekuatan dan referensi host) dan satu set metode umum, satu untuk setiap perilaku:

Ketika pengaturan digunakan, hal tersebut harus menerima referensi ke host yang dicolokkan. Ini akan memungkinkan pengaturan untuk mengubah kecepatan host vektor menurut perilaku aktif.

Setiap perilaku diwakili oleh dua metode, publik dan satu pribadi. Menggunakan pencarian sebagai contoh:

Seek() umumnya akan dipanggil untuk memberitahu manajer untuk menerapkan perilaku tertentu. Metode tidak memiliki pengembalian nilai dan parameter yang berhubungan dengan perilaku itu sendiri, seperti titik dalam ruang. Di bawah penggunaan metode pribadi doSeek() akan dipanggil dan nilai kembali, Angkatan kemudi dihitung untuk perilaku tertentu, akan ditambahkan ke manajer properti steering.

Kode berikut menunjukkan pelaksanaan pencarian:

Semua metode perilaku lainnya diimplementasikan dalam cara yang sangat mirip. Metode pursuit(), misalnya, akan terlihat seperti ini:

Menggunakan kode dari tutorial sebelumnya, Semua yang harus Anda lakukan adalah menyesuaikan mereka dalam bentuk behavior() dan doBehavior(), sehingga mereka dapat ditambahkan ke pengaturan gerakan.


Menerapkan dan Memperbarui Pasukan Kemudi

Setiap kali metode behavior dipanggil, Hasilnya akan menghasilkan ditambahkan ke manajer properti steering. Akibatnya properti tersebut akan mengumpulkan semua pasukan kemudi.

Ketika semua perilaku telah dipanggil, manajer harus mendaftar Angkatan kemudi host kecepatan saat ini, sehingga akan bergerak sesuai dengan perilaku yang aktif. Itu dilakukan dalam metode Update() akan membuat gerakan manajer:

Metode di atas harus dipanggil oleh tuan rumah (atau entitas lain game) setelah semua perilaku telah dipanggil, jika tidak host tidak akan pernah berubah dengan kecepatan vektor untuk menyesuaikan perilaku aktif.


Penggunaan

Mari kita asumsikan kelas bernama Prey harus bergerak menggunakan kemudi perilaku, tetapi pada saat itu telah ada kode kemudi maupun pengelola gerakan. Strukturnya akan terlihat seperti ini:

Menggunakan struktur tersebut, contoh-contoh class dapat memindahkan menggunakan Euler integration, seperti demo pertama mencari tutorial. Agar dapat menggunakan Manajer, dibutuhkan sebuah properti referensi manajer gerakan dan menerapkan antarmuka IBoid:

Method update() harus berubah sebagaimana mestinya jadi Manajer dapat diperbarui juga:

Semua perilaku dapat digunakan pada saat yang sama, asalkan semua metode panggilan yang dibuat sebelum manajer update() akan menghasilkan permintaan, yang berlaku kemudi akumulasi memaksa untuk kecepatan vektor host.

Kode di bawah ini menunjukkan versi lain dari metode update() akan membuat mangsa, tapi kali ini akan mencari posisi dalam peta dan menghindari karakter lain (keduanya pada saat yang sama):


Demo

Demo di bawah menunjukkan pola kompleks gerakan yang mana beberapa perilaku dikombinasikan. Ada dua jenis karakter dalam adegan: Hunter dan Prey.

Pemburu (hunter) akan mengejar mangsa jika dekat cukup; itu akan mengejar selama stamina pasokan berlangsung; Ketika menjalankan kekurangan stamina, mengejar terganggu dan pemburu akan berkeliaran sampai sembuh dengan tingkat stamina.

Berikut adalah metode update() Hunter:

Mangsa akan berkeliaran tanpa batas. Jika pemburu mendapat terlalu dekat, itu akan menghindar. Jika kursor mouse dekat dan tidak ada pemburu di sekitar, mangsa akan mencari kursor mouse.

Berikut adalah metode update() prey:

Hasil akhir (gray adalah berkelana, hijau adalah dicari, orange adalah pengejar, merah adalah menghindari):


Berburu. Klik untuk melihat kekuatan.

Kesimpulan

Sebuah manajer gerakan ini sangat berguna untuk mengendalikan beberapa perilaku kemudi pada saat yang bersamaan. Kombinasi dari perilaku seperti itu dapat menghasilkan pola pergerakan yang sangat kompleks, memungkinkan sebuah entitas game untuk mencari satu hal pada saat yang sama itu evades lain.

Saya harap Anda menyukai sistem manajemen yang dibahas dalam tutorial ini dan menerapkannya  dan menggunakannya dalam permainan Anda. Terima kasih telah membaca! Jangan lupa untuk tetap up to date dengan mengikuti kami di Twitter, Facebook, atau Google+.

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.