Pygame перемещает положение объекта из одной точки в другую с постоянной скоростью - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть куча объектов в разных координатах, и мне нужно анимировать их, перемещая в другую координату
то есть. один объект находится в coodinate (234,30), и мне нужно, чтобы он пошел (310,540).

Как мне сделать это в Pygame? Я пытался возиться с уклоном и тому подобными вещами, но я не мог получить положение своего объекта, чтобы плавно идти туда.

1 Ответ

2 голосов
/ 24 ноября 2011

Ну, вы должны просто изменить его координаты в игровом цикле.

Есть два способа сделать это.

Во-первых, например, если вы хотите, чтобы ваш объект двигался со скоростью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...