Полагаю, GetRotate()
возвращает двумерный вектор (или 3D, который на самом деле не имеет значения, если z
не имеет значения), представляющий компоненты x и y вращения. Если это так, вам, возможно, понадобится другой подход при настройке перевода Это связано с тем, что m_vVelocity
кажется локальным по отношению к объекту (то есть положительное значение y вперед, но зависит от вращения объекта).
Вам могут помочь:
Умножить GetRotate()
на m_vVelocity.y
Затем получите нормаль к вектору, возвращаемому GetRotate()
. Умножьте этот вектор на m_vVelocity.x
.
Добавьте эти два вектора вместе, чтобы получить окончательный относительный вектор перевода. Итак, теперь вы получаете что-то вроде следующего:
// Move the object.
Vector2f forwardVec = GetRotate() * m_vVelocity.y;
Vector2f sideVec = GetRotate().GetNormal() * m_vVelocity.x;
// Obviously above you need a real method to get the normal of GetRotate,
// I used a "pseudo" method.
m_spNode->SetTranslate(GetTranslate() + forwardVec + sideVec );
РЕДАКТИРОВАТЬ: имейте в виду, что метод поиска векторной нормали отличается от 2D-пространства к 3D-пространству (Нет единой определенной нормали для одного вектора в 3D-пространстве, но в 2D-пространстве я использовал 2D-вектор в пример выше по этой причине)