Saya mencoba mencari solusi yang bagus agar peluru dapat mengenai musuh. Permainan ini adalah pertahanan menara 2D, menara ini seharusnya menembakkan peluru dan mengenai musuh yang dijamin.
Saya mencoba solusi ini - http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
Tautan yang disebutkan untuk mengurangi asal peluru dan musuh juga (pengurangan vektor). Saya mencobanya tetapi sebutir peluru mengikuti musuh.
float diffX = enemy.position.x - position.x;
float diffY = enemy.position.y - position.y;
velocity.x = diffX;
velocity.y = diffY;
position.add(velocity.x * deltaTime, velocity.y * deltaTime);
Saya kenal vektor tetapi tidak yakin langkah apa (operasi matematika vektor) yang harus dilakukan untuk mendapatkan solusi ini.
Jawaban:
Alasan Anda sempurna: gunakan vektor untuk berpindah dari posisi saya ke target saya. Ini adalah tujuan dari vektor ; Anda lupa kecepatannya !
Kecepatan adalah vektor: kecepatan dan arah. Namun, jika Anda lupa untuk menormalkan vektor perbedaan dan mengalikannya dengan kecepatan peluru (skalar), Anda pada dasarnya mengatakan bahwa jika Anda dekat dengan target (vektor perbedaan kecil) peluru melambat ; sedangkan jika Anda jauh, kecepatan peluru lebih besar.
Ini adalah masalah mendasar: Anda perlu menghitung arah dan besarnya vektor.
sumber
Jika target bergerak ke arah yang stabil dengan kecepatan yang stabil, dan jalur peluru Anda berada di garis lurus dengan kecepatan yang stabil, Anda dapat menggunakan persamaan kuadrat untuk memprediksi tempat yang tepat mereka akan berpotongan dan mengarahkan senjata menara Anda di tempat itu .
Karena ini adalah kepastian bahwa peluru akan mengenai sasarannya, dan Anda dapat menghitung waktu yang tepat untuk menembak, tidak ada deteksi tabrakan yang diperlukan, cukup tembak pistol, tunggu rentang waktu yang dihitung, daftarkan hit.
Berikut adalah kode semu untuk persamaan kuadrat:
sumber
Anda perlu 'memprediksi' posisi objek pada saat peluru akan mencapainya. Anda dapat melakukan ini dengan menggunakan objek kecepatan / kecepatan (mudah-mudahan itu konstan;)) dan itu adalah vektor arah.
Saya tidak yakin apa rumus tepatnya di atas kepala saya, tetapi saya pikir itu adalah sesuatu seperti ini:
NewPosition = OldPosition + (Kecepatan * DirectionVector);
Jika Anda memiliki jalur yang ditetapkan, Anda harus menghitung ulang saat objek berubah arah. Gunakan NewPosisi ini sebagai musuh Anda. Vektor posisi dan peluru harus mengenai objek tanpa 'efek homing'. Homing terjadi karena fakta bahwa objek musuh telah bergerak sejak vektor asli dihitung, ia hanya bisa mengejar ketika sebuah objek bergerak dalam satu arah cukup lama.
Semoga ini membantu :)
sumber
Anda dapat menghindari menggunakan akar kuadrat & kekuatan 2.
Semuanya ditulis dari memori. Ngomong-ngomong, gunakan elemen-elemen yang berfungsi - ujilah baris demi baris jika Anda baru dalam hal ini Float adalah Angka dalam AS3.
sumber