Ну, вы должны просто изменить его координаты в игровом цикле.
Есть два способа сделать это.
Во-первых, например, если вы хотите, чтобы ваш объект двигался со скоростью 50 пикселей в секунду, вы должны отправлять отметки функции обновления в каждом кадре, а затем изменять координаты 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
в int, пока вы копируете (или рисуете) его на поверхности. При этом ваш объект перемещается на одну и ту же величину каждую секунду.
Второй способ - перемещать ваш объект в каждом кадре. Это означает, что скорость вашего объекта может меняться в зависимости от частоты кадров (например, в переполненной сцене частота кадров может падать, и это замедляет движение ваших объектов).
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 имеет 4 свойства: 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