Выровняйте форму по вектору, используя 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);

Возможно, вам придется преобразовать результат из радианов в градусы или наоборот.

Другие вопросы по тегам