我刚开始使用pygame,我只是想在屏幕上移动点。问题是它以快速的方式发生,并且在循环运行时我的pygame屏幕冻结(不响应),然后仅显示点的最后迭代位置。 我认为更新发生得很快。
当我包含pygame.event.wait()
时,当我输入内容时,循环将继续进行,我可以在窗口中实时跟踪点如何在屏幕上移动。但是,我希望它们在屏幕上移动而无需输入。
这是我的主循环:
def run(self):
self.food_spread()
self.spawn_animal()
for k in range(20000):
print(k)
for member in self.zoo:
self.move(member)
self.screen.fill(black)
for i in range(self.food_locations.shape[0]):
pygame.draw.rect(self.screen, white, (self.food_locations[i,1], self.food_locations[i,2],1,1))
for member in self.zoo:
pygame.draw.circle(self.screen, green,(member.location[0], member.location[1]), 2,1)
pygame.display.update()
pygame.event.wait()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
答案 0 :(得分:1)
您有一个应用程序循环,请使用if。使用pygame.time.Clock()
控制帧频。应用程序循环必须
clock.tick(60)
)例如:
class App:
def __init__(self):
# [...]
self.clock = pygame.time.Clock()
def run(self):
self.food_spread()
self.spawn_animal()
run = True
while run:
# control the framerate
self.clock.tick(60) # 60 FPS
# handel the events
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# move the objects
for member in self.zoo:
self.move(member)
# clear the display
self.screen.fill(black)
# draw the scene
for i in range(self.food_locations.shape[0]):
pygame.draw.rect(self.screen, white, (self.food_locations[i,1], self.food_locations[i,2],1,1))
for member in self.zoo:
pygame.draw.circle(self.screen, green,(member.location[0], member.location[1]), 2,1)
# update the display
pygame.display.update()