Cara memisahkan objek bertabrakan tanpa membuat lebih banyak tabrakan

11

Misalkan saya menggunakan sistem deteksi tabrakan diskrit sederhana di mana saya memindahkan semua objek kemudian memeriksa tabrakan. Saya ingin benda bertabrakan dipisahkan (tentu saja) dan diberi kecepatan respons yang sesuai (bouncing, slide, stop, dll.).

Ketika saya memiliki sepasang objek bertabrakan, bagaimana cara memisahkannya tanpa berakhir dengan satu atau keduanya bertabrakan dengan objek lain?

AJM
sumber

Jawaban:

8

Ini bukan masalah yang mudah dipecahkan secara umum. Dalam mesin fisika itu akan ditangani oleh pemecah contraint. Ada banyak jenis pemecah kendala, tetapi salah satu yang paling mudah dipahami adalah pemecah impuls berurutan.

Erin Catto memberikan penjelasan yang bagus tentang pemecah impuls berurutan di beberapa GDC sebelumnya, mereka dapat diunduh dari halaman unduhan Box2D , lihat contoh GDC 2009.

Niall
sumber
Saya ingin tahu tentang ini. Mengingat betapa umum kebutuhan untuk deteksi tabrakan dan resolusi saya berasumsi setidaknya ada algoritma resolusi sederhana yang cocok untuk game arcade dan aksi.
AJM
2
Tidak juga. Di masa lalu (SNES dll), mereka mendapat masalah seperti ini dengan perubahan desain game atau kompromi. Misalnya. Di Super Mario, ketika pemain dipukul, Mario tidak akan terkalahkan selama beberapa detik untuk memotong tabrakan kedua. Di Double Dragon, tabrakan diabaikan untuk pemain sampai animasi untuk jatuh mundur telah selesai.
yaustar
@yaustar Sebenarnya Mario tidak memiliki tabrakan dengan musuh sama sekali. Itu hanya membutuhkan kerusakan ketika kotak hitnya tumpang tindih dengan mereka.
Musim dingin
3

Satu-satunya cara agar hal ini tidak terjadi adalah mencegah penetrasi. Sebelum Anda memindahkan objek, Anda memastikan itu adalah langkah legal. Perhatikan bahwa ini berarti Anda harus memindahkan objek Anda satu per satu untuk menghindari kasus dua objek bergerak satu sama lain.

Jika tidak ada penetrasi yang terjadi, Anda tidak perlu mengatur ulang posisi apa pun sehingga Anda tidak akan memicu penetrasi sekunder.

Loren Pechtel
sumber
2

Apa yang biasanya saya lakukan adalah sebagai berikut:

Ketika Anda memisahkan objek dan berakhir dengan lebih banyak tabrakan, Anda hanya mengulanginya lagi, sampai jumlah langkah maksimum tercapai atau objek menembus kurang dari ambang yang telah ditentukan.

noio
sumber
Itu sangat tidak stabil. FPS dalam gim Anda bisa meningkat kapan saja pemain membuat kekacauan dengan mendorong benda ringan. Akan lebih baik untuk menyelesaikannya frame berikutnya.
Musim dingin