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

Python 在循环中绘制的pygame矩形在屏幕上滚动,python,python-2.7,pygame,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

这是我的全部代码:

 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个正方形,但它们在窗口向右滚动,我不知道为什么。我有没有办法阻止这一切

谢谢


我现在意识到这与矩形循环无关,但我已将其更改为建议的内容。

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

x=0
while not done:

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

现在您添加了更多的代码,我知道问题来自何处,正如我所怀疑的那样-您正在以不正确的方式进行静态翻译,即在
中使用
x
(您在主循环之外定义了该值)来表示范围(x,x+100,10)内的x:

如果在
for
-循环中添加
print(x)
语句,您将能够看到
x
变得越来越大,越来越大…这非常适合为场景添加动力学,但我猜(基于您的问题)您希望为场景添加10个静态矩形

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

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坐标,并将
范围(x,x+100,10)
替换为
范围(CONST,CONST+100,10)
中的
CONST
是一个给定值,例如0,100,1000等。

你在屏幕上的意思是什么?因为从您提供的代码片段中可以看到,您正在沿x轴绘制10个矩形。这也在屏幕上显示。:)另外,
x=x+1
是不正确的,除非您的目标是
x=x+2
,这基本上是因为
对于范围(10)
中的x,每次迭代增加一次
x
,并且添加额外的增加语句会增加
x
。您不需要
i
(在一定范围内,您可以设置步长并将限制增加到100)。通过屏幕,我的意思是沿x轴移动10个矩形,然后所有10个矩形都在屏幕上移动。你说的x+1是对的,谢谢,但我不明白你说的不需要i是什么意思(我可能只是很愚蠢,对不起)@rbaleksanda在那之前你做过某种翻译吗?我没有使用PyGame的经验,但根据我使用OpenGL的经验,例如,在99.9%的情况下,当你不希望某个东西在屏幕上移动时,它会在屏幕上移动,这是因为你已经应用了一些在主循环的每次迭代中都不会重置的转换,它只会添加到它以前的状态,导致“无限”转换(在您的例子中是翻译)。尝试发布一个最小的工作示例,因为到目前为止,您提供的代码没有任何错误。我刚刚安装了
pygame
并使用了它,屏幕上没有任何移动。循环之外的东西会让你头疼。我的意思是为范围(0,100,10)内的x指定
:pygame.draw.rect(screen,BLACK,[x,0,10,10],1)
,并指定
x
作为矩形起点的x坐标。@rbaleksandar显然没有阅读文本。我展示的代码不是用来工作的,它是用来展示问题的,没有任何多余的代码。这看起来有点正确,但我需要在接受之前检查一下。如果每次都将x重置为0,它不就是在相同的位置重新绘制矩形吗@rbaleksander是的,图形将始终从同一位置开始,剩余的9个矩形将根据您定义的
范围紧随其后。如果你想让矩形移动(因为从它的当前状态来看,你只能断定你想让矩形保持在原来的位置),改变你的问题。哦,我现在明白了,对不起。谢谢。所以最后这就是你想要的——静态的而不是动态的矩形?是的,我的问题可能措辞不好