Loop
Насколько я знаю, в Pygame нет ничего такого, что frames()
дает вам итератор кадров, пригодных для использования с циклом for
.Вам нужно использовать цикл while
.В теле цикла вы выполняете все вычисления, перемещаете поверхности, перетаскиваете их на экран и рисуете.Таким образом, каждая итерация цикла является «кадром» (я думаю, что термин frame в данном случае не подходит, это не фильм с последовательностью изображений).
Примечание ксила тяжести
Гравитация - это сила или ускорение (если вы не заботитесь о массах).В вашем коде вы воспринимаете это как скорость, перемещая объект с дорогой скоростью в каждой итерации.Если вы хотите реалистично смоделировать гравитацию, вам нужно увеличить скорость со временем, чтобы скорость из-за гравитации увеличивалась в соответствии с законом равномерного ускорения .
A очень простой пример, чтобы дать вам идею.
Этот код воспроизводит свободное падение:
gravity = 2 #or whatever constant value you want for the gravity acceleration
screen = pygame.display.set_mode((x, y)) #x and y here is the resolution
while True:
object.time += 1
gravity_speed = gravity * object.time
object.rect.y += gravity_speed
screen.blit(object.image, object.rect)
pygame.display.update()
pygame.time.delay(50) #add a delay before the next loop, otherwise things happens really fast.
Этот код не работает, как есть, вещи отсутствуют, как рисованиефон экрана, создание экземпляра object
, который должен быть экземпляром некоторого подкласса спрайта, а также повторное создание фона на предыдущей позиции object
или способ разрыва цикла.
object.time
должно бытьСбрасывайте на 0
каждый раз, когда объект приземляется на поверхность, не позволяя ему упасть.
Обратите внимание, что object
должен быть экземпляром созданного вами класса (вероятно, дочерний класс Sprite ) так что вы можете реализовать свои собственные атрибуты (например, time
, ни один класс не имеет его, если вы его не создаете) и методы.
Дело в том, что у вас есть реализация физики, которую яв игре.pygame не делает этого за вас.
Кроме того, ознакомительное руководство по pygame и учебное пособие Sprite может быть хорошим чтением.