2013-07-23 2 views
0

В моей игре я хочу, чтобы мои башни стреляли туда, где враг будет к тому времени, когда пуля достигнет его.cocos2d-x определить, где объект будет зависеть от его вектора

я не хочу, чтобы моя пуля на кривой, я хочу, чтобы стрелять непосредственно ожидаемого местоположения на основе скорости аппарат движется и направление его движется

Моя мысль в том, что я определить направление моего противника, вычитая его текущее положение с его последней позиции каждый раз, когда он движется. так что скажем, что его направление (1,1)

после этого я не уверен на 100%, какую логику мне нужно будет делать.

Я думаю, мне нужно знать расстояние от башни до врага, чтобы определить время, которое мне нужно оценить, насколько далеко будет враг, когда пуля должна дотянуться до него.

Я действительно не знаю, с чего начать, если кто-нибудь может дать мне несколько указателей на то, как я должен справиться с этим решением.

+0

Вы знаете направление вашего противника ((1,1) в вашем примере), так что вам нужно также скорость вашего противника, чтобы оценить, где это произойдет, когда ваша пуля достигнет ее. Конечно, я предполагаю знать, когда вы будете стрелять из своей пули и скорость вашей пули. – neutrino

ответ

0

В случае равномерно ускоренного линейного перемещения

x(t) = x0 + vx * t 
y(t) = y0 + vy * t 

, где vx, vy являются проекции скорости v на координатной оси. Velocity - вектор, скалярное значение которого - скорость и направление в направлении движения. В вашем случае, если ваш вектор направления нормализуется, умножьте его на скорость, чтобы получить скорость.

Стартовая позиция: (x0, y0). Вам нужны только прогнозы vx и vy. Если w это угол между осью х и скоростью, а затем

vx = v * cos(w) 
vy = v * sin(w) 

Что касается угла: использовать atan2f функцию или функция cocos2d ccpToAngle (который использует atan2f сами по себе) с нормированным вектором направления.

0

Предположим, что вектор положения вашего врага P, его скорость E и скорость вашей пули b. [Я буду использовать букву верхнего регистра для вектора, а его соответствующий строчный регистр для его модуля]

Предположим, после времени t противник будет поражен.

Затем t*B = P + t*E [где B - скорость пули. Обратите внимание, что вы не знаете направление B, но вы его значение, b]

Попробуйте рассчитать t! Нелегко, я думаю, есть еще один неизвестный вектор направленности B. Вы должны заменить его известными переменными и t, а затем решить, если для t. Используйте другие векторные инструменты, такие как точечный продукт, чтобы получить угол между P и B, чтобы перейти к другим уравнениям и отношениям между другими векторами.

Обновление:
Я просто сделал некоторые короткие вычисления, возможно, я ошибаюсь. Просто дайте мне знать, если это сработает.
t реальное положительное решение следующего уравнения:
t^2*(e^2-b^2) + t*(2*p*e*cos(the angle between P and E)) + p^2 = 0

 Смежные вопросы

  • Нет связанных вопросов^_^