Saya mencari ide bagaimana menerapkan mengikuti dalam ruang 2D. Sayangnya saya belum tahu banyak tentang AI / pencarian jalur / kontrol otonom.
Katakanlah kapal ini bisa bergerak bebas tetapi memiliki massa dan momentum. Juga, kekuatan eksternal mungkin memengaruhinya (ledakan dll). Pemain dapat menetapkan target untuk kapal kapan saja dan harus mencapai tempat itu dan berhenti.
Tanpa fisika ini akan sederhana, arahkan saja ke arah dan pergi. Tetapi bagaimana menghadapi momentum yang ada dan kemudian berhenti di tempat? Saya tidak ingin mengubah penempatan kapal secara langsung.
sunting: Hanya untuk memperjelas, fisika yang berhubungan dengan matematika kapal itu sendiri bukanlah masalahnya.
physics
ai
path-finding
movement
Petteri Hietavirta
sumber
sumber
Jawaban:
Lihatlah perilaku kemudi . Terutama mencari dan kedatangan mungkin menarik untuk kebutuhan Anda. Perilaku ini juga akan berfungsi ketika beberapa pengaruh lain seperti ledakan mengubah posisi kapal sementara.
sumber
Ini bukan masalah mudah untuk mendapatkan yang benar. Anda memiliki dua pilihan, meskipun spesifik setiap solusi berbeda-beda:
Solusi matematis. Jika sistem fisika Anda cukup sederhana, Anda dapat membuat formulir tertutup untuk gerakan Anda dan menghitung kapan Anda harus mulai menerapkan kekuatan pengereman untuk berhenti pada suatu titik. Jika gaya pengereman Anda konstan dan Anda tidak memiliki hambatan udara, ini akan terurai menjadi kuadratik.
Solusi emperikal. Anda dapat menggunakan pengontrol PID yang disetel dengan tangan atau benar-benar merekam jarak pengereman untuk kapal Anda dalam sistem fisika Anda: dalam testbed, rem kapal dari kecepatan maksimum ke berhenti, mencatat jarak yang ditempuh dan mempercepat setiap catatan waktu kecil. Menyimpan grafik jarak / kecepatan yang dihasilkan dalam direktori data.
Pada saat run time, buat kembali grafik dan pasang kecepatan Anda saat ini dan target kecepatan untuk keluar jarak. Pada jarak ini dari titik target Anda, Anda harus berada di rem penuh.
Keuntungan dari pendekatan ini adalah Anda dapat menggunakannya untuk mengerem dengan kecepatan berapa pun. Kerugiannya adalah jika rem Anda harus naik atau turun, Anda tidak akan pernah benar-benar berada di tikungan.
sumber
Seperti yang dikatakan sebelumnya, situasi ini sempurna untuk perilaku mengemudi, tetapi saya hanya ingin sedikit memperluasnya. Perilaku Tiba akan sempurna untuk skenario ini. Anda mungkin juga ingin memperhitungkan halangan. Anda dapat memanfaatkan perilaku Penghindaran Kendala di sini juga.
Sayangnya, http://www.red3d.com/cwr/steer/ tidak menyediakan kode sumber untuk perilaku tersebut. Namun, Memprogram Game AI dengan Contoh melakukan dan menjelaskan perilaku dalam potongan yang mudah dipahami. Jika Anda tidak bisa mendapatkan buku itu, Anda selalu bisa mendapatkan kode sumber di sini: http://www.wordware.com/files/ai/
Selain itu, jika Anda ingin memperluas gerakan Anda untuk memasukkan pathfinding, Anda dapat memiliki kelas pathfinder yang menghitung jalur (mungkin sebagai kumpulan vektor 2D) dan menggunakan perilaku kemudi Path Follow untuk menambahkannya ke dalam campuran juga.
Kode sumber yang saya tautkan juga menyediakan tiga metode berbeda untuk menggabungkan perilaku kemudi ini juga.
Semoga itu bisa membantu.
sumber
Mengarah ke suatu posisi tidak terlalu sulit, tetapi saya pribadi berjuang untuk sementara waktu dengan masalah kemudi ke arah suatu posisi dan mencapainya pada kecepatan tertentu, atau mengikuti jalan dengan kendala kecepatan.
Saya memecahkan masalah menggunakan kurva Hermite . Atur p0 dan m0 ke posisi dan kecepatan kapal Anda, p1 dan m1 ke posisi dan kecepatan target Anda. Ini mengasumsikan Anda ingin kapal mengikuti satu detik setelah target. Hitung turunan kedua p (0), yang akan memberi Anda akselerasi untuk diterapkan pada kapal Anda.
Berikut adalah kode untuk turunan kedua (dalam F #, saya harap Anda dapat menyesuaikannya dengan bahasa pilihan Anda; sq () menghitung kuadrat, tanda kutip tunggal tidak diartikan sebagai tanda kutip tetapi sebagai karakter, mereka adalah bagian dari pengidentifikasi):
Perhatikan bahwa jika kapal Anda tunduk pada kekuatan eksternal (mis. Gravitasi dari planet), Anda harus memperhitungkannya saat menghitung daya dorong dari akselerasi.
sumber
Menemukan ini baru-baru ini - perilaku kemudi dalam JavaScript & Pemrosesan:
http://shawnldoria.com/works/steering-behaviors.html
sumber
Saya pikir kapal Anda harus memiliki parameter seperti: posisi dan kecepatan.
Kecepatan dalam setiap jumlah kerangka dari semua gaya (seperti gravitasi, ledakan, input pengguna dll) dan juga dapat memiliki semacam lembab.
Posisi dihitung dari posisi terakhir ditambah kecepatan * time_step.
Namun, dengan ini bisa sulit untuk menerapkan penghentian tepat sasaran.
sumber