Pygame:将物体移向位置

时间:2013-11-02 22:58:34

标签: python animation pygame game-physics

是否有算法更改一组坐标以使其向另一组坐标移动?

赞,如果我有ax,ay=(20,30)bx,by=(40,60)

我似乎无法绕过这个。如何将axay(随着时间的推移)更改为bxby? (最好是在python中可实现的算法。)

3 个答案:

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

现在,stepxstepy具有每个步骤所需的移动量。你需要做的是在游戏循环的每次迭代中添加:

# 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”点,并在到达该点时通过。