在循环中绘制的pygame矩形滚动屏幕

时间:2016-03-19 12:40:28

标签: python python-2.7 pygame

这是我的完整代码:

 import pygame
pygame.init()

i = 0
x = 0

# Define the colors we will use in RGB format
BLACK = (  0,   0,   0)
WHITE = (255, 255, 255)
BLUE  = (  0,   0, 255)
GREEN = (  0, 255,   0)
RED   = (255,   0,   0)

# Set the height and width of the screen
size = [600, 300]
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Test")

#Loop until the user clicks the close button.
done = False
clock = pygame.time.Clock()

while not done:
    clock.tick(10)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done=True

    screen.fill(WHITE)

    for x in range(x, x+100, 10):
       pygame.draw.rect(screen, BLACK, [x, 0, 10, 10], 1)

    pygame.display.flip()

pygame.quit()

绘制了10个方格,但它们在窗口向右滚动,我不知道为什么。有什么方法可以阻止这个吗?

感谢。

我现在意识到它不是关于矩形循环,但我已将其改为已建议的内容。

2 个答案:

答案 0 :(得分:0)

现在您已经添加了更多代码,我看到了问题的来源,就像我怀疑的那样 - 您正在使用x(您在你的for x in range(x, x+100, 10):

中的主循环

如果您在print(x)循环中添加for语句,您将能够看到x变得越来越大,越来越大......这非常适合添加动态到您的场景,但我的猜测是(根据您的问题)您想要为场景添加10个静态矩形。

为了做到这一点,您需要每次x循环的新迭代开始时重置while

while not done:
    clock.tick(10)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done=True

    screen.fill(WHITE)

    # Every single iteration of the while loop will first reset the x to its initial value
    # You can make x be any value you want your set of rectangles to start from
    x = 0

    # Now start adding up to x's initial value
    for x in range(x, x+100, 10):
      pygame.draw.rect(screen, BLACK, [x, 0, 10, 10], 1)

    pygame.display.flip()

如果您不使用它来更改第一个矩形将从哪里开始的x坐标,您也可以将x的定义省略为for循环之外的变量,并替换{ {1}} range(x, x+100, 10)其中range(CONST, CONST+100, 10)是给定值,例如0,100,1000等。

答案 1 :(得分:-1)

每次你的for循环运行时,范围都会递增,因为x是持久的。如果您删除x=0,请在while内重置,或在for循环中使用其他变量,我认为它会起作用。

x=0
while not done:

    for x in range(x, x+100, 10):
       pygame.draw.rect(screen, BLACK, [x, 0, 10, 10], 1)