Ini mungkin pertanyaan vektor sederhana, tapi saya tidak yakin bagaimana melakukannya.
Saya memiliki objek pada posisi vektor (ox,oy)
. Berpotensi setiap pembaruan, pengguna berjalan di sekitar layar, dan akan berada pada posisi (px,py)
pada saat tertentu. Bagaimana cara membuatnya agar objek selalu menghadap pemain? Saya perlu mendapatkan sudut dalam derajat.
Ini adalah apa yang saya telah main-main dengan, tetapi arahnya tidak langsung menunjuk ke tempat pengguna berada. Sebagai gantinya, itu perlahan-lahan bertambah ke arah pengguna berjalan.
objVec.Normalize();
playerVec.Normalize();
obj.Rotation = MathHelper.ToDegrees((float)Math.Acos(Vector2.Dot(objVec, playerVec)));
Saya mungkin salah sepenuhnya, jadi bantuan apa pun dihargai!
Jawaban:
Pikirkan masalahnya secara berbeda. Anda ingin objek selalu "menghadap" pemain, yang berarti Anda ingin vektor "maju" -nya diputar sejajar dengan vektor dari dirinya sendiri ke pemain. Dengan asumsi vektor "maju" pada umumnya
obj.Rotation = 0
, rotasi yang tepat pada dasarnya adalah arctangentVector2.Subtract(playerPos, objectPos)
. Sebagian besar perpustakaan matematika akan memiliki sesuatu sepertiatan2
itu mengambil dua argumen atauVector2
yang secara otomatis akan mencari kuadran yang tepat untuk Anda.EDIT: Saya menyadari bahwa Anda berada di C # dan ini sebenarnya adalah kelas bawaan. Jadi Anda tidak harus pergi mencari dokumentasi perpustakaan matematika, saya bisa melakukannya untuk Anda. Kode yang benar adalah:
Perhatikan pembalikan X / Y; untuk kismis histeris, Atan2 selalu memiliki argumen yang terbalik.
sumber