我正在尝试将矩形移动到特定速度的特定点。
然而,只有x,y
(我试图将其移动到的点)相同时,它才能正常工作。否则,如果x
大于y
,它将以45度角移动,直到self.location[1]==y
(它到达y
所需的位置),然后它会移动在x
的直线上,反之亦然。
我知道我必须更改speed_y
以便它更慢。我如何计算出我需要的速度,以便无论location
是什么,矩形都会以直线移动到location
?
全功能:
def move(self,x,y,speed):
if speed==0:
self.location=[x,y]
else:
speed_x = speed
speed_y = speed
if x > 0 and not self.location[0]==x: # x is positive and not already where it needs to be
if not x == y:
speed_x = something # need to slow down the speed so that it gets to y as the same time as it gets to x
self.speed_x=speed_x
else: self.speed_x=0
if y > 0 and not self.location[1]==y: # same for y
if not x == y:
speed_y = something # need to slow down the speed so that it gets to y as the same time as it gets to x
self.speed_y=speed_y
else: self.speed_y=0
答案 0 :(得分:1)
您应该将速度设置为每个轴所需距离的比率。 例如如果到x的距离是y的一半距离,那么speed_x应该是half_y的一半。
根据要求提供的进一步示例:
distance_x = x-self.location[0]
distance_y = y-self.location[1]
if abs(distance_x) < abs(distance_y):
ratio = distance_x/abs(distance_y)
speed_x = ratio * speed
编辑:重写了示例的方向。
答案 1 :(得分:1)
我不太了解你的要求,但看看这对你有帮助:
speed_x = speed*(cos(atan2((y-self.location[1]), (x-self.location[0]))))
speed_y = speed*(sin(atan2((y-self.location[1]), (x-self.location[0]))))
通过将其分成所需的值,可以“减慢”你所获得的速度。到达你希望盒子同时出现的位置。
请原谅我的英语/ python中的任何错误,我不是任何一个错误:)
答案 2 :(得分:-1)
你需要通过数学计算才能在每一步中获得新的位置。