将矩形移动到特定点

时间:2014-07-14 02:06:15

标签: python pygame

我正在尝试将矩形移动到特定速度的特定点。

然而,只有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

3 个答案:

答案 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)

你需要通过数学计算才能在每一步中获得新的位置。