1

円のアニメーションを作成しようとしていて、練習のためにウィンドウ内でバウンドさせたいと思っています。pygame.draw.rectオブジェクトを返すと言われましたが、Rect動作するかどうかを確認するためにこの小さなコードを作成しましたが、動作しませんでした。円は、予想どおり、反復ごとに 1 ピクセル下に移動しませんでした。何が問題なのですか?

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

フレームごとに円を描画し、長方形を更新する必要があります。ヒント: わずかに編集して 1 行だけ移動する必要があります

さて、あなたは円を正しく描いていますが、同じ位置に描いています。draw.circle に渡す引数を注意深く見てください。どこに円を描くように指示しているのでしょうか。

于 2012-06-03T09:11:14.980 に答える
0

ここでは、円を描画し、(100, 200)後で使用するために rect を保存しています (二度と使用しませんが)。

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

円陣から画面へのrect攻防を捉えています。が再び使用されることはないため、blit後で動き回っても問題ありません。毎回ではなく の位置に円が描画されるように、コードを変更する必要があります。circleRectcircleRectcircleRect(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 に答える