То, что вы спрашиваете, нетривиально.Я начну с самого простого решения и остановлюсь на этом.
Сначала предположим, что и вы, и ваш враг неподвижны.Вам нужно вычислить угол между вами и вашим врагом, повернуть оружие, чтобы указать на врага, а затем стрелять.Используйте вашу любимую поисковую систему, чтобы найти описание того, как найти угол между двумя точками на плоскости (вы сказали, 2D).
После того, как вы напишите код, который может выполнить вышеизложенное, перейдите к:
Ваш враг движется в постоянном направлении с постоянной скоростью.Вы все еще неподвижны.Это удивительно сложная проблема.Для упрощения предположим, что вы можете нацелить свое оружие мгновенно.
Если вы знаете, где вы и противник, а также скорость и направление противника, то вы можете определить позицию противника (и,следовательно, его расстояние и направление от вас) в любое время.
Вы знаете, как быстро ваш снаряд может путешествовать.Поэтому, если вы проведете линию от вашей текущей позиции, чтобы перехватить любую позицию на ожидаемом пути движения противника, вы можете определить, сколько времени понадобится вашему снаряду, чтобы поразить противника.Ключ, следовательно, заключается в том, чтобы найти точку на пути врага, которая, если бы вы немедленно выпустили снаряд, в нужный момент пересекла бы врага.Обычно для этого требуются последовательные приближения.
Если вы не можете повернуть оружие мгновенно, тогда проблема становится более сложной, поскольку время, необходимое для поворота оружия, чтобы указать на врага, зависит от того, как быстро и в каком направлениивраг путешествует.Требуются дополнительные приближения.
Вещи становятся еще более запутанными, когда вы и враг движетесь, хотя можно построить математику так, чтобы вы "держали себя неподвижно".То есть выполните преобразование скорости и траектории противника, чтобы отразить, как противник движется относительно вас.Математика становится идентичной случаю, когда вы неподвижны.
Математика сама по себе является элементарной тригонометрией.Вам нужно знать, как рассчитать расстояние между двумя точками, расстояние между линией и точкой, угол между двумя точками, вычислить точки на линии с заданной начальной точкой и направлением и как вращаться вокруг произвольной точки.Все это хорошо известные проблемы, у которых есть много хороших примеров в Интернете.Однако вам придется провести небольшое исследование, чтобы найти их.
Вероятно, вам лучше всего найти хороший учебник по компьютерной графике.