使用 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);
您可能需要将结果从弧度转换为度或相反。
我一直在使用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);
您可能需要将结果从弧度转换为度或相反。