Pygame以恒定速度移动物体位置从一点到另一点
我有一堆物体,它们在不同的位置上,我想让它们动到另一个位置。
比如说,一个物体现在在坐标(234,30)上,我想让它移动到(310,540)这个位置。
我该怎么在pygame里实现这个动画呢?我试着调整斜率之类的东西,但就是无法让我的物体平滑地移动到那个位置。
1 个回答
4
好吧,你只需要在你的游戏循环中改变它的坐标。
有两种方法可以做到这一点。
第一种,比如说,如果你想让你的物体每秒移动50像素,你应该在每一帧中发送更新函数的时间间隔,然后通过 x + x_speed * ticks / 1000
来改变物体的x和y坐标(这里的ticks是毫秒,所以你需要把它转换成秒)。
def update_object(ticks):
object.x += float(x_speed) * ticks / 1000 # converting to float is needed
# this is your main game loop
time = pygame.time.Clock()
ticks = 0
while running:
...
update_object(ticks)
ticks = time.tick(30) # this 30 means time.tick() waits enough to make your max framerate 30
注意,在把物体绘制到表面时,你可能需要把 object.x
转换成整数。这样,你的物体每秒移动的距离都是一样的。
第二种方法是在每一帧中移动你的物体。这意味着物体的速度可能会根据你的帧率而变化(例如,在一个拥挤的场景中,帧率可能会下降,这会导致物体移动得更慢)。
def update_object():
object.x += object_vx
object.y += object.vy
# this is your main game loop
while running:
...
update_object()
顺便说一下,我忘了提到你的物体实现。我喜欢用pygame.Rect来保存坐标。pygame.Rect有四个属性,x、y、高度和宽度。这样你也可以保存物体精灵的长度和高度。
例如:
character = pygame.Rect(10, 10, 20, 30)
character_image = pygame.image.load(...)
screen.blit(character_image, character) # screen is you surface
当你想改变角色的坐标时:
character.x += x_amount
character.y += y_amount