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

Graphics 使用Dgame框架和D语言将形状与向量对齐,graphics,2d,coordinates,d,2d-games,Graphics,2d,Coordinates,D,2d Games,我一直在使用Dgame框架进行简单的模拟 我需要移动的物体和它们的速度向量对齐 如何使用Dgame实现这一点 我看到形状对象有setRotation和setRotationCenter。不知道如何使用这些来达到效果。我意识到默认设置是围绕原点旋转。这会导致对象随时间漂移 示例代码 struct GameObject { Point **position; // array of pointers to object points Point *acceleration; Point *veloc

我一直在使用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);

您可能需要将结果从弧度转换为度或其他方式。

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

对于面朝上的纹理:

rotation = atan2(-velocity.x, velocity.y);
对于面向右侧的纹理:

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

您可能需要将结果从弧度转换为度,或者反过来。

那么这就是您想要做的吗@WebFreak001这就是我想做的我猜只是旋转而没有位置?@WebFreak001是的只是旋转所以这就是你想做的吗@WebFreak001这就是我想做的我猜只是旋转,没有位置?@WebFreak001是的,只是旋转