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

时间:2011-11-24 06:11:04

标签: python animation pygame

我有一堆不同坐标的物体,我需要动画它们移动到另一个坐标 即。 一个对象是coodinate(234,30),我需要它去(310,540)。

我如何在pygame中执行此操作?我试着用斜坡和类似的东西弄乱,但我无法得到我的物体,平稳地去那里。

1 个答案:

答案 0 :(得分:2)

好吧,你应该在游戏循环中改变它的坐标。

有两种方法可以做到这一点。

首先,例如,如果您希望对象每秒移动50px,则应在每个帧中发送更新函数标记,然后将对象的x和y坐标更改为x + x_speed * ticks / 1000(此处,标记为以毫秒为单位,所以你应该将它转换为秒。)

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 blitting(或绘制)到曲面时,可能需要将def update_object(): object.x += object_vx object.y += object.vy # this is your main game loop while running: ... update_object() 转换为int。这样,您的对象每秒都会移动相同的数量。

第二种方法是在每一帧中移动你的对象。这意味着您的对象的速度可能会根据您的帧速率而变化(例如,在拥挤的场景中,您的帧速率可能会下降,这会使您的对象移动得更慢)。

character = pygame.Rect(10, 10, 20, 30)
character_image = pygame.image.load(...)
screen.blit(character_image, character)  # screen is you surface
顺便说一句,我忘了提及你的对象实现。我在对象中保存坐标的首选方法是使用pygame.Rect。 pygame.Rect有4个属性,x,y,height和width。有了它,你还可以保持对象的精灵的长度和高度。

例如:

character.x += x_amount
character.y += y_amount

当你想改变角色的坐标时:

{{1}}