是否有算法更改一组坐标以使其向另一组坐标移动?
赞,如果我有ax,ay=(20,30)
和bx,by=(40,60)
我似乎无法绕过这个。如何将ax
和ay
(随着时间的推移)更改为bx
和by
?
(最好是在python中可实现的算法。)
答案 0 :(得分:5)
如果你仔细想想,这很容易。要创建运动的幻觉,您需要创建一个动画 - 即逐步移动对象 。
对象需要水平移动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)
答案 1 :(得分:3)
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
答案 2 :(得分:1)
在使用pygame时,您可以使用矢量在屏幕上移动对象。
import pygame as pg
vec = pg.math.Vector2
a = vec(20, 30)
b = vec(40, 60)
a += b
将其放入循环中并增加速度以使其变慢。 您的对象将移向“ b”点,并在到达该点时通过。