Pygame以恒定速度移动物体位置从一点到另一点

1 投票
1 回答
11032 浏览
提问于 2025-04-17 06:58

我有一堆物体,它们在不同的位置上,我想让它们动到另一个位置。
比如说,一个物体现在在坐标(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

撰写回答