gpt4 book ai didi

python - 如何使用增量时间和速度停止超出目标位置

转载 作者:行者123 更新时间:2023-12-01 08:35:00 28 4
gpt4 key购买 nike

我正在尝试让“火车”在轨道上上下移动。轨道是具有 x 和 y 坐标的节点列表。

火车上下移动,但有时,根据距离和速度,它会在 1 个增量时间步长内超过节点,并开始左右跳跃(或上下跳跃,具体取决于方向),因为该节点未注册已达到。

我试图建立一个阈值。如果在阈值像素数量内到达该节点,则它将下一个节点作为目标。这有帮助,但当然它会根据距离和速度不断发生:

if dist <= 5:
self.currentGoalNode += self.iterateBy

我尝试单独计算每毫秒而不是增量时间行驶的距离,并检查每个步骤是否达到了目标,但无法使其正常工作,我停止了尝试,因为它似乎会导致大量不必要的代码和计算。

有没有一种简单的方法可以解决这个问题,或者我是否走在正确的“轨道”上,我需要额外的代码吗?

我的整个代码:

self.iterateBy = 1
self.floatPosition = self.rect.center

def move (self, dt):

# calculate distance
dist = math.hypot(self.path[self.currentGoalNode].x - self.rect.centerx,
self.path[self.currentGoalNode].y - self.rect.centery)

# check if going up or down on path
if self.currentGoalNode +1 >= self.totalNodes or self.currentGoalNode <= 0:
self.iterateBy *= -1

# attempt to eradicate the 'jumping' by making a treshold
if dist <= 5:
self.currentGoalNode += self.iterateBy

diffx, diffy = (self.route[self.currentGoalNode][0] - self.rect.center[0],
self.route[self.currentGoalNode][1] - self.rect.center[1])

angle = math.atan2(diffx, diffy)
x = (math.sin(angle) * self.velocity) * dt
y = (math.cos(angle) * self.velocity) * dt

# keeping track of the position in floats
self.floatPosition= tuple(map(sum, zip(self.floatPosition, (x,y))))

# moving the rect and converting to ints
self.rect.center = self.floatPosition

最佳答案

如果您距目标仅 1 增量步(1dist <= 阈值),则不要添加迭代器。相反,只需将位置设置为目标位置即可。

关于python - 如何使用增量时间和速度停止超出目标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53769709/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com