Как заставить спрайты перемещаться равномерно на всех компьютерах в Pygame & Python - PullRequest
3 голосов
/ 14 февраля 2012

У меня проблема с равномерно движущимися спрайтами;В настоящее время я использую цикл while для их перемещения, проблема в том, что чем быстрее компьютер, тем быстрее проходит цикл и быстрее движутся спрайты.Я попытался использовать функцию таймера / часов (wait?) В Pygame, и он останавливает курсор во время ожидания, поэтому создание курсора с перебоями.

Является ли многопоточность ответом?

Вотвидео моей проблемы;http://www.youtube.com/watch?v=cFawkUJhf30

Ответы [ 2 ]

9 голосов
/ 14 февраля 2012

Вы зависите от частоты кадров, чем быстрее частота кадров, тем быстрее будет ваше движение.

Обычно мы рассчитываем время между 2 кадрами / цикл итерации, и мы назвали его «дельта-время»».Затем мы умножаем это время дельты на вектор движения.

Вот пример цикла:

clock = pygame.time.Clock()
while True:
    # limit the framerate and get the delta time
    dt = clock.tick(60)

    # convert the delta to seconds (for easier calculation)
    speed = 1 / float(dt)

    # do all your stuff, calculate your heroes vector movement
    # if heroes position is "px, py" and movement is "mx, my"
    # then multiply with speed
    px *= mx * speed
    py *= my * speed

Затем движение следует частоте кадров: если ваш цикл быстрее, то дельтаниже, а затем движение будет медленнее за кадр => результат будет иметь одинаковую скорость независимо от частоты кадров.

Теперь вы независимы от частоты кадров.

0 голосов
/ 14 февраля 2012

Я нашел тему, касающуюся этой проблемы здесь :

Попробуйте выполнить следующее:

clock = pygame.time.Clock()
while True:
    if clock.tock(60): #Limit to 60fps
        ... #Update game display here
    else:
        cursor.update()
...