Saya memiliki permainan sederhana di mana pemain menggerakkan bola. Bola memantul dari dinding. Saat ini saya memiliki dinding persegi (■) yang diimplementasikan: Saya menggunakan tabrakan kotak pembatas sederhana untuk memeriksa apakah pemain akan pindah ke dinding ketika memperbarui kecepatan x atau y dan jika demikian, saya melipatgandakan kecepatan itu dengan -1 untuk membuatnya memantul .
Namun, saya juga ingin menerapkan potongan segitiga (◢◣◤◥). Untuk bangkit kembali, saya percaya seseorang cukup menggunakan:
newxspeed = -1*yspeed;
newyspeed = -1*xspeed;
Namun, apa yang saya mengalami masalah adalah deteksi tabrakan: Kapan pemain mencapai diagonal?
Jawaban:
Pertama-tama untuk menghitung deteksi tabrakan antara bola (lingkaran dalam 2D) dan garis yang Anda butuhkan untuk menghitung vektor tegak lurus antara pusat bola yang bergerak dan garis, untuk menghitung jarak ini, Anda perlu melakukan hal berikut:
Jadi untuk menghitung d pada gambar di atas kita perlu melakukan beberapa langkah.
Kemudian Anda perluas persamaan untuk mendapatkan yang berikut ini, sepertinya sedikit rumit tetapi sebenarnya tidak.
Di mana Q adalah pusat lingkaran dan S adalah titik mana pun di garis. Setelah jaraknya kurang dari radius lingkaran / bola Anda harus memicu respons tabrakan yang dijelaskan pada titik berikutnya.
Tidak benar untuk selalu membalik komponen x atau y untuk memantulkan bola, yang perlu Anda lakukan adalah merefleksikan vektor kecepatan, untuk melakukannya, Anda perlu menghitung vektor Normal permukaan dan menggunakannya normal untuk menghitung refleksi. vektor menggunakan persamaan berikut
di mana R adalah vektor refleksi, N adalah normal dari permukaan dan V adalah vektor Velocity.
Dalam kasus 45 deg permukaan Anda normal akan menjadi N = (1,1,0) dengan tanda bervariasi tergantung pada arah mana wajah normal (posisi atau negatif).
sumber
Anda ingin mengukur jarak antara pusat bola dan dinding, jadi:
menyelesaikan sistem yang Anda lihat dalam gambar akan memberi Anda koordinat titik d.
Kemudian, jika jarak antara titik d dan c lebih kecil atau sama dengan jari-jari bola r, ada tabrakan antara bola dan dinding
sumber
Bola sebenarnya adalah objek yang agak sederhana untuk deteksi tabrakan. Mereka bertabrakan dengan medan ketika jarak antara pusat bola dan tepi medan menjadi kurang dari jari-jari bola. Posisi pusat bola harus sepele untuk diperoleh. Menemukan titik terrain terdekat umumnya lebih rumit dan cara terbaik untuk melakukannya tergantung pada bagaimana medan terwakili.
Algoritme Anda untuk menghitung kecepatan baru setelah memantulkan kemiringan diagonal salah. Membalikkan koordinat x dan y akan membuat bola kembali ke arah yang sama saat mendekati kemiringan. Ini bagus jika bola datang di medan dari sudut kanan, tetapi gagal untuk sudut lain. Anda ingin meniadakan hanya komponen yang normal ke permukaan, misalnya saat memantul dari langit-langit, Anda meniadakan y, bukan x.
sumber