是否有一种算法可以更改一组坐标以使其向另一组坐标移动?
就像,如果我ax,ay=(20,30)
有bx,by=(40,60)
我似乎无法解决这个问题。我怎样才能改变ax
和ay
(随着时间的推移)等于bx
和by
?(最好是可以在 python 中实现的算法。)
是否有一种算法可以更改一组坐标以使其向另一组坐标移动?
就像,如果我ax,ay=(20,30)
有bx,by=(40,60)
我似乎无法解决这个问题。我怎样才能改变ax
和ay
(随着时间的推移)等于bx
和by
?(最好是可以在 python 中实现的算法。)
如果您考虑一下,这很容易。要创建运动的错觉,您需要创建动画 - 即逐步移动对象。
对象需要水平移动 20 像素 ( bx - ax = 20
) 和垂直移动 30 像素 ( by - ay = 60
)。现在,您需要定义对象移动的步数。这基本上取决于您游戏的帧速率,如果您希望动画持续 1 秒并且您的游戏以 25fps 运行,则动画将需要 25 步。如果您的游戏没有固定的帧速率而是其他内容,则您需要根据从最后一帧经过的时间计算游戏循环的每次迭代的移动量。
假设我们以 25fps 的固定速度运行。在这种情况下,您需要执行以下操作:
dx, dy = (bx - ax, by - ay)
stepx, stepy = (dx / 25., dy / 25.)
现在,stepx
并且stepy
拥有每一步所需的运动量。您需要做的是在游戏循环的每次迭代中添加:
# In each iteration:
object.set_position(object.x + stepx, object.y + stepy)
steps_number = max( abs(bx-ax), abs(by-ay) )
stepx = float(bx-ax)/steps_number
stepy = float(by-ay)/steps_number
for i in range(steps_number+1):
print int(ax + stepx*i), int(ay + stepy*i)
结果:
20 30
20 31
21 32
22 33
22 34
23 35
24 36
24 37
25 38
26 39
26 40
27 41
28 42
28 43
29 44
30 45
30 46
31 47
32 48
32 49
33 50
34 51
34 52
35 53
36 54
36 55
37 56
38 57
38 58
39 59
40 60
当您使用 pygame 时,您可以使用向量在屏幕上移动对象。
import pygame as pg
vec = pg.math.Vector2
a = vec(20, 30)
b = vec(40, 60)
a += b
把它放在你的循环中并增加速度以减慢它的速度。您的对象将向“b”点移动,并在到达该点时通过它。