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

2024-05-06 16:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆不同坐标的对象,我需要设置它们移动到另一个坐标的动画
即。 一个物体在库迪纳特(234,30),我需要它去(310540)。

在pygame我该怎么做?我试着把斜坡之类的东西弄得乱七八糟,但我没法让我的物体的位置平稳地到达那里。


Tags: 对象动画pygame物体斜坡
1条回答
网友
1楼 · 发布于 2024-05-06 16:37:44

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

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

首先,例如,如果希望对象每秒移动50px,则应在每一帧中发送更新函数ticks,然后通过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块化(或绘制)到一个曲面时,可能需要将其转换为int。有了这个,你的物体每秒移动相同的量。

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

def update_object():
   object.x += object_vx
   object.y += object.vy

# this is your main game loop
while running:
    ...
    update_object()

顺便说一下,我忘了提到你的对象实现。我在对象中保存坐标的首选方法是使用pygame.Rect's.pygame.Rect有4个属性,x、y、height和width。有了这个,你也可以保持你的对象的精灵的长度和高度。

例如:

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

相关问题 更多 >