1

我想在原点和移动的玩家对象之间绘制一条简单的 2D 线。我尝试使用一个始终查看玩家实体的单独实体:

class Body(Entity):
    def __init__(self, head: Head):
        super().__init__(model="line", color=color.orange, scale=0)
        self.origin = Vec2(0, 0)
        self.head = head

    def update(self):
        self.look_at_2d(self.head)
        self.scale = distance(self, self.head)

但是这条线仍然以原点为中心并且方向错误,“表面”面向玩家,而不是尖端:

线朝向错误的方向

如何正确调整线条的旋转和位置?

4

1 回答 1

0

解决方案

def update(self) -> None:
    if self.active:
        self.position = Vec2(self.head.x / 2, self.head.y / 2)
        self.rotation = (0, 0, degrees(atan(self.head.x / (self.head.y or 1))) + 90)
        self.scale = distance(self.origin, self.head)

您无法确定线尖的位置,因此将其定位在原点和点之间的中心。

所需的旋转是 x = 0 处的线与点之间的角度。将整个问题想象成一个直角三角形允许在这里使用三角函数。

点到原点的距离 x 与距离 y 的距离是角度的正切。所以它的反正切给了我们以弧度为单位的角度,我们将其转换为度数。

于 2022-03-02T02:26:42.350 回答