使用 Dgame 框架和 D 语言将形状与矢量对齐

Align shape to vector using Dgame framework and D language

我一直在使用Dgame框架进行简单的模拟。

我需要移动物体与其速度矢量对齐。

如何使用 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);

您可以使用 atan2 实现此目的。根据纹理的方向,您可能需要稍微更改值或添加 90/-90 度。

对于正面朝上的纹理:

rotation = atan2(-velocity.x, velocity.y);

对于面向右的纹理:

rotation = atan2(-velocity.y, -velocity.x);

您可能需要将结果从弧度转换为度或相反。