Saya membuat beberapa AI dasar untuk scroller samping saya dan saya perlu tahu apakah unit AI dapat mencapai titik B dari titik A hanya dengan mengambil lompatan.
Lintasan penerbangan karakter saya agak tidak biasa karena mereka dapat menerapkan gaya di udara (seperti dalam Jazz Jackrabbit 2 misalnya), jadi tidak seperti lintasan klasik proyektil yang sekitar ...
jalur yang dilemparkan atau diluncurkan proyektil akan mengambil (...) tanpa dorongan.
... Saya kira masalah saya lebih pada proyektil dengan propulsi (mis. Roket).
Untuk mengilustrasikannya, ini adalah bagaimana kurva penerbangan terlihat untuk karakter saya jika saya melompat dan terus menekan "tombol kiri" (terlihat berbeda di ujung kiri, ini adalah tempat saya membuat beberapa manuver di udara):
Gaya yang diterapkan selama penerbangan selalu sejajar dengan sumbu X, jadi itu adalah F = (-f, 0) jika saya menahan "kiri" dan itu adalah F = (f, 0) jika saya memegang "kanan".
Dia bisa bergerak sangat seperti pelompat ski:
Jadi sangat berbeda dari lintasan klasik yang hanya parabola (sumber: wikipedia ):
Untuk membuatnya lebih sulit, saya mensimulasikan hambatan udara sederhana sehingga karakter saya dapat mempercepat hanya hingga beberapa nilai kecepatan maksimum.
Ini dilakukan dengan menerapkan kekuatan kecil dalam arah perjalanan yang berlawanan :
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize(); //normalizes vector and returns length
body->ApplyForce( AIR_RESISTANCE_MULT * speed * speed * -vel, body->GetWorldCenter() );
AIR_RESISTANCE_MULT adalah konstanta yang dalam kasus saya sama dengan 0,1.
Mari kita asumsikan bahwa karakter saya adalah titik yang sangat kecil.
Dan saya TIDAK mempertimbangkan penghalang, jadi pertanyaan saya seperti ini ...
Cara menentukan (setidaknya dugaan andal), mengingat kecepatan awal V, impuls J = (0, -j) yang saya terapkan pada karakter saat melompat, gravitasi G = (0, g) , gaya F = (+ -f , 0) terus diterapkan selama penerbangan dan AIR_RESISTANCE_MULT jika kita benar-benar memutuskan untuk memperhitungkan hambatan udara (ini opsional) , apakah suatu titik terletak di bawah kurva yang ditarik oleh jalur yang akan diambil oleh karakter saya?
Saya benar-benar tidak tahu harus mulai dari mana dengan perhitungan dan pada kenyataannya, saya belum tentu tertarik dengan jawaban yang tepat; hack / pendekatan yang berfungsi dengan baik akan sangat bagus sebagai AI yang tidak perlu bertindak dengan sempurna.
sunting: Saya telah memutuskan untuk menyelesaikan ini menggunakan simulasi seperti yang disarankan Jason, tetapi bagaimana menangani kasus seperti itu?
Haruskah saya menggambar segmen dari C ke D dan memeriksa apakah titik yang diinginkan ada di bawah segmen ini?
Atau haruskah saya biner mencari timesteps antara C dan D untuk mencari titik yang cukup dekat dalam jarak horizontal ke titik yang diinginkan, dan hanya kemudian memeriksa perbedaan vertikal? (Sepertinya agak berlebihan bagiku)