Ich entwickle ein 2D-Android-Spiel und mache einen Zielalgorithmus für KI-Projektile, um Feinde entweder auf einem Pfad oder in freier Bewegung zu treffen. Im Moment wird nur berechnet, wo sich das Ziel nach einer Entfernung befindet, und es wird ein Projektil abgefeuert, um es in dieser Entfernung zu treffen. Dies bedeutet natürlich, die Projektilgeschwindigkeit zu variieren, um das Ziel zu erreichen.
Hat jemand Tipps für einen einfachen Algorithmus (optimal), um zu berechnen, wann das Projektil feuern muss und wohin es zielen muss, wenn es sich nur mit konstanter Geschwindigkeit fortbewegen kann? Angenommen, das Projektil ist doppelt so schnell wie das Ziel?
Der einzige Weg, den ich mir vorstellen kann, ist das Suchen und scheint ziemlich groß zu sein.
Antworten:
In einem von mir erstellten Tower-Defense-Spiel habe ich eine quadratische Gleichung verwendet, um den Schnittpunkt und damit den Zielpunkt vorherzusagen. Das folgende Zielcode-Snippet geht davon aus, dass sich der Feind mit konstanter Geschwindigkeit und Richtung bewegt. Es wird auch davon ausgegangen, dass sich das Projektil mit einer bekannten konstanten Geschwindigkeit bewegt (kann eine beliebige Geschwindigkeit sein, muss aber dem Algorithmus bekannt sein).
Da es auch den Zeitpunkt des Aufpralls bestimmt, habe ich einfach gewartet, bis die Zeit abgelaufen ist, um die Aufprallgrafiken an der Position des Ziels zu diesem Zeitpunkt aufzurufen. Es ist keine Kollisionserkennung erforderlich, um Treffer zu bestimmen.
quelle
a
ist 0? Dies führt zu einer Ausnahme durch Division durch Null, aber was bedeutet dies in Bezug auf die Variable t? sollte es als "eine sehr große Zahl" betrachtet werden oder was wäre der beste Fall?Die KI, der Standort des Ziels während des Abschusses des Projektils und der eventuelle Standort des Ziels zum Zeitpunkt des Todes bilden ein Dreieck. Hier sollten Sie bereits wissen:
Sie haben drei Teile des Dreiecks, einen SSA-Fall, also lösen Sie es so
Winkel A sollte es Ihnen ermöglichen, den Winkel zu bestimmen, in dem das Projektil abgefeuert werden soll.
quelle