Saya baru-baru ini mengganti mesin permainan saya dari perilaku kemudi ke gerakan berbasis impuls dengan resolusi tabrakan berbasis waktu yang tepat. Ini telah memecahkan begitu banyak masalah (tidak lagi tunneling, yay) dan membuat simulasi jauh lebih stabil. Namun, dengan stabilitas telah muncul masalah baru.
Tiga bola memulai perjalanan mereka di dekat bagian bawah gambar, target mereka adalah di mana bola merah muda telah berhenti. Di tengah jalan, bola merah dan hijau tersangkut di titik choke di dinding.
Sebelumnya, saya bisa mengandalkan kesalahan floating point dan ketidakstabilan umum dari perilaku kemudi untuk membuat bola hijau dan merah saling berdesak-desakan sampai mereka berhasil melewati choke point. Sekarang dengan resolusi tabrakan yang tepat, gaya yang bekerja pada bola membatalkan satu sama lain yang menghasilkan bola tetap diam.
Metode apa yang biasanya digunakan untuk menyelesaikan situasi seperti itu? Mungkin semacam sistem antrian prioritas akan berfungsi, meskipun saya dapat melihatnya menjadi kompleks setelah saya perlu memutuskan prioritas antara lebih dari 2 objek.
sumber
Jawaban:
Tetapkan setiap objek bergerak indeks unik & melarang objek dengan indeks lebih tinggi dari memindahkan agen dengan indeks lebih rendah. Ini akan memungkinkan objek 'lama' untuk mendorong yang 'baru', tetapi tidak sebaliknya & lebih sedikit overhead daripada antrian. Pada dasarnya, indeks bertindak sebagai prioritas pergerakan.
sumber
tambahkan waktu ke pencarian jalur
di sini adalah sebuah makalah yang berbicara tentang kubus waktu: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf
dan di sini adalah implementasi Objective-C: http://allseeing-i.com/ASIPathFinder
sumber
Sebenarnya, saya tidak berpikir Anda harus memperbaikinya. Jika (saya bisa menebak) panah menunjukkan vektor gaya yang diterapkan pada bidang apa pun, pada posisi apa pun di kisi (mungkin diinterpolasi "bi-linier" atau juga, atau entah bagaimana lebih banyak "analog" daripada hanya menjadi 0/1), maka perilaku secara fisik benar dan Anda harus memberi selamat kepada diri sendiri karena memiliki solusi yang berperilaku baik.
2 bola berada dalam keseimbangan yang baik, karena mereka duduk di sana dan saling membenci. Rupanya, jika mereka bergerak sedikit ke kanan, "panah kekuatan" ke kanan mempengaruhi bola sisi kanan sedikit lebih (dan sebaliknya di bola sisi kiri; sedikit kurang), dan karenanya mereka bergerak kembali ke keseimbangan. Beginilah seharusnya.
Imho, apa yang harus diperbaiki adalah dinding, atau ukuran bola, atau sesuatu yang lain di antara batu bata itu sendiri. Anda telah menciptakan suatu kemustahilan dan perilaku yang benar dalam situasi itu merupakan jalan buntu (maaf untuk kata-kata yang menyalahgunakan, saya harap Anda mendapatkannya :-)).
Mungkin sebaliknya menonaktifkan panah kekuatan kiri / kanan terdekat, atau mengaturnya dengan cara lain yang tidak simetris dan tidak mendorong untuk menyeimbangkan ?
Saya pikir itu akan menjadi perbaikan buruk untuk memperbaikinya secara palsu ... akan menjadi terlalu dini.
sumber