1

我正在尝试制作一个圆形动画,并希望它在窗口内弹跳只是为了练习。有人告诉我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)
4

2 回答 2

0

您必须绘制圆并更新每一帧中的矩形。提示:您只需稍微编辑并移动一行

好的,现在您正在正确地绘制圆,但是您将它绘制在相同的位置。仔细看看你传递给draw.circle的参数,你在哪里告诉它画圆?

于 2012-06-03T09:11:14.980 回答
0

在这里,您只是将圆圈绘制到(100, 200)并存储矩形以供以后使用(即使您不再使用它)。

screen.lock()
circleRect = pygame.draw.circle(screen, (255, 255, 255), (100, 200), 40)
screen.unlock()

您正在rectblit圆圈中捕捉到屏幕。没关系,以后,你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

circleRect.top += 1
circleRect = pygame.draw.circle(screen, (255, 255, 255), circleRect, 40)
于 2012-06-03T12:32:15.337 回答