pygame圈动画

时间:2012-06-03 09:07:57

标签: python pygame

我正在尝试创建一个圆形动画,并希望它在窗口内反弹,只是为了练习。我被告知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)

2 个答案:

答案 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)