Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame:将对象移向位置_Python_Animation_Pygame_Game Physics - Fatal编程技术网

Python Pygame:将对象移向位置

Python Pygame:将对象移向位置,python,animation,pygame,game-physics,Python,Animation,Pygame,Game Physics,是否有一种算法可以改变一组坐标,使其向另一组坐标移动 比如,如果我有ax,ay=20,30和bx,by=40,60 我似乎无法对这件事保持清醒。如何将ax和ay随时间更改为等于bx和by? 最好是用python实现的算法 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_num

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

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

我似乎无法对这件事保持清醒。如何将ax和ay随时间更改为等于bx和by? 最好是用python实现的算法

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

如果你仔细想想,这很容易。要创建移动的错觉,您需要创建一个动画,也就是说,一步一步地移动对象

对象需要水平移动20个像素bx-ax=20,垂直移动30个像素-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)

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

导入pygame作为pg 向量=pg.math.Vector2 a=20,30 b=40,60 a+=b 把它放在你的循环中,增加速度来降低速度。
你的物体将朝着b点移动,当它到达该点时将经过它。

你的意思是,到a去追逐b?你想让ax,ay变成21,31,22,32。。。39,59?是的,基本上我想让它追!有办法调整速度吗?当我使用这个代码的时候,当物体移动的时候,物体就位于点的顶部。你必须除以小于25的数字。要获得更少的步数,或者必须将步数乘以对象。设置_positionobject.x+2*stepx,object.y+2*stepy并减少迭代次数。vecb不起作用-向量不可调用。你是对的,我错加了。所以,就像这样使用:vec=pg.math.Vector2,你也可以规范化向量,以获得更平滑的运动。我实际上是指你的最后一行。pg.math.Vector2实例化一个空向量,pg.math.Vector2实例化一个值为0,0的向量-所以两个版本都可以工作。不起作用的是你的线a+=vecb。a和b都应该是一个向量,然后它必须起作用。更正它。试试这个,它现在应该适合你了。Sry解决了这个问题。