我想用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上运行代码,为什么!!!
答案 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():
从系统获取事件,那么系统会认为程序挂起并且系统可以终止程序。