【问题标题】:Pygame: Move object towards positionPygame:将对象移向位置
【发布时间】:2020-12-03 19:24:58
【问题描述】:

有没有一种算法可以改变一组坐标,使其向另一组坐标移动?

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

我似乎无法理解这一点。如何将axay(随着时间的推移)更改为等于bxby? (最好是在python中可以实现的算法。)

【问题讨论】:

  • 你的意思是,到a 到“追逐”b
  • 你想让 ax,ay 变成 21,31 22,32 ... 39,59 ?
  • 是的,基本上我希望它“追逐”!

标签: python animation pygame game-physics


【解决方案1】:

如果您考虑一下,这很容易。要创建运动的错觉,您需要创建一个动画 - 即逐步移动对象

对象需要水平移动 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)

【讨论】:

  • 有没有办法调整速度?当我使用此代码时,对象只是在移动时位于点的顶部。
  • 您必须除以小于 25 的数字。要获得更少的步数您必须乘以步数object.set_position(object.x + 2*stepx, object.y + 2*stepy) 并减少迭代次数。
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    当您使用 pygame 时,您可以使用向量在屏幕上移动对象。

    import pygame as pg
    
    vec = pg.math.Vector2
    a = vec(20, 30)
    b = vec(40, 60)
    a += b
    

    将其放入您的循环中并增加速度以减慢它的速度。 您的对象将向“b”点移动,并在到达该点时通过它。

    【讨论】:

    • vec(b) 不起作用 - 向量不可调用。
    • 你说得对,我加错了()。所以只需像这样使用: vec = pg.math.Vector2 您还可以对向量进行归一化以获得更平滑的运动。
    • 我的意思是你的最后一行。 pg.math.Vector2 实例化一个空向量,pg.math.Vector2() 用值 (0, 0) 实例化一个向量 - 所以两个版本都可以工作。不起作用的是您的线路a += vec(b)
    • “a”和“b”都应该是一个向量然后它必须工作。
    • 已更正。试试这个,它现在应该对你有用。为这个问题道歉。
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2013-12-25
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多