使用pygame创建放大圆半径的动画失败

时间:2017-12-09 16:05:52

标签: python pygame

我想用python来创建一个圆形放大的raidus动画。 我用两种方法来实现这一目标,一种是成功,另一种是失败。 我想知道为什么,是否有人可以提供帮助。 版本1:

import pygame
global DISPLAYSURF, FPSCLOCK
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWNWIDTH, WINDOWNHEIGHT))
radius = 1
while True:

    for event in pygame.event.get():
        if event.type == QUIT:
             pygame.quit()
            sys.exit()
    radius = radius + 1
    pygame.draw.circle(DISPLAYSURF, RED, (100, 100), radius)
    pygame.display.update()
    FPSCLOCK.tick(1)

版本2:

import pygame
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWNWIDTH, WINDOWNHEIGHT))

for radius in range(0, 100, 2):
    pygame.draw.circle(DISPLAYSURF, RED, (100, 100), radius)
    pygame.display.update()
    FPSCLOCK.tick(1)
while True:
   just_wait = True

版本是我想要的,版本2无法正常工作

我使用python3在macOs 10.13.1 High Sierra上运行代码,为什么!!!

1 个答案:

答案 0 :(得分:1)

我认为你把代码放错了,应该是

for radius in range(0, 100, 2):
    pygame.draw.circle(DISPLAYSURF, RED, (100, 100), radius)
    pygame.display.update()
    FPSCLOCK.tick(1)
    while True:
       just_wait = True

这意味着您在while True循环内运行for循环。

但是while True循环是无限循环 - 你永远不会离开它 所以它永远不会回到绘制新的圆圈和更新屏幕。

您可以将print()放入代码中,然后您就会看到它。

第一个版本是首选版本,因为它不仅可以绘制动画,还可以检查事件,因此您可以随时离开程序。

在某些系统上,如果您不使用pygame.event.get():从系统获取事件,那么系统会认为程序挂起并且系统可以终止程序。