我正在尝试创建一个圆形动画,并希望它在窗口内反弹,只是为了练习。我被告知pygame.draw.rect
返回一个Rect
对象,然而,我制作了这个小代码以查看它是否有效,但事实并非如此。圆圈没有像预期的那样每次迭代向下移动一个像素。可能是什么问题?
import pygame, sys
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((600, 500), 0, 32)
mainClock = pygame.time.Clock()
screen.lock()
circleRect = pygame.draw.circle(screen, (255, 255, 255), (100, 200), 40)
screen.unlock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
circleRect.top += 1
pygame.display.update()
mainClock.tick(40)
答案 0 :(得分:0)
您必须绘制圆并在每个帧中更新矩形。提示:您需要稍微编辑并移动一行
好的,现在您正在正确地绘制圆圈,但是您将它绘制在相同的位置。仔细看看你传递给draw.circle的参数,你在哪里告诉它绘制圆圈?
答案 1 :(得分:0)
在这里,您只是将圆圈绘制到(100, 200)
并存储矩形供以后使用(即使您再也不使用它)。
screen.lock()
circleRect = pygame.draw.circle(screen, (255, 255, 255), (100, 200), 40)
screen.unlock()
您正在从rect
的圆圈中抓取blit
到屏幕。之后,你移动circleRect
并不重要,因为circleRect
永远不再使用。您必须更改代码,以便在circleRect
的位置绘制圆圈,而不是每次都在(100, 200)
。
circleRect= = pygame.Rect(100,200, 0, 0)
screen.lock()
circleRect = pygame.draw.circle(screen, (255, 255, 255), circleRect, 40)
screen.unlock()
然后,在主循环中,您需要使用与之前相同的行重绘圆圈,只需调整top
attrib:
circleRect.top += 1
circleRect = pygame.draw.circle(screen, (255, 255, 255), circleRect, 40)