Выровняйте форму по вектору, используя Dgame Framework и язык D
Я использовал Dgame Framework для простого моделирования.
Мне нужно, чтобы движущийся объект был выровнен по их векторам скорости.
Как это можно сделать с помощью Dgame?
Я вижу, что объект формы имеет setRotation и setRotationCenter. Не уверен, как использовать их для достижения эффекта. Я понимаю, что по умолчанию вращение вокруг источника. Это заставляет объекты дрейфовать со временем.
Образец кода
struct GameObject {
Point **position;
// array of pointers to object points
Point *acceleration;
Point *velocity;
double max_speed;
double max_force;
}
shape = new Shape(Geometry.Quads,
Vertex(object.position[0].x, object.position[0].y),
Vertex(object.position[1].x, object.position[1].y),
Vertex(object.position[2].x, object.position[2].y),
Vertex(object.position[3].x, object.position[3].y))
// rotate shape to face velocity here
shape.move(object.velocity.x, object.velocity.y);
1 ответ
Решение
Вы можете добиться этого, используя atan2
, В зависимости от ориентации текстуры вам может понадобиться немного изменить значения или добавить 90/-90 градусов.
Для текстур, которые направлены вверх:
rotation = atan2(-velocity.x, velocity.y);
Для текстур, которые обращены вправо:
rotation = atan2(-velocity.y, -velocity.x);
Возможно, вам придется преобразовать результат из радианов в градусы или наоборот.