İniş Freespace'i hatırlayanlarınız için, güdümlü olmayan füzeler veya lazerler çekerken düşmana nişan almanıza yardımcı olmak için güzel bir özelliği vardı: geminin önünde, kovaladığınız geminin önünde, vurmak için nereye ateş edeceğinizi söyleyen bir artı işareti vardı hedef.
Https://stackoverflow.com/questions/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1 adresinden gelen yanıtı kullanmayı denedim ancak 2B için denedim uyarlamak.
Önce XoZ düzlemi için kesişim noktasını çözmek için hesaplamayı ayrıştırdım ve x ve z koordinatlarını kaydettim ve sonra XoY düzlemi için kesişim noktasını çözdüm ve daha sonra klip alanına dönüştürdüğüm ve bunlara bir doku koyduğum bir son xyz'ye y koordinatını ekledim koordinatlar. Ama tabii ki olması gerektiği gibi çalışmıyor ya da başka bir soru sormazdım.
XoZ düzleminde x ve XoY'de x bulduktan sonra fark ettiğimden x aynı değil, bu yüzden bir şeyler yanlış olmalı.
float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) -
ENG_Math.sqr(projectileSpeed);
float b = 2.0f * (targetVelocity.x * targetPos.x +
targetVelocity.y * targetPos.y);
float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y);
ENG_Math.solveQuadraticEquation(a, b, c, collisionTime);
İlk kez targetVelocity.y aslında targetVelocity.z (targetPos için aynıdır) ve ikinci kez aslında targetVelocity.y'dir.
XoZ'dan sonraki son pozisyon
crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f,
minTime * finalEntityVelocity.z + finalTargetPos4D.z);
ve XoY'den sonra
crossPosition.y = minTime * finalEntityVelocity.y + finalTargetPos4D.y;
2 uçağa ayırma ve iyi hesaplama hesaplama yaklaşımım var mı? Yoksa 3D için tamamen farklı bir yaklaşım var mı?
- sqr () kare değil sqrt - bir karışıklık kaçınarak.