使用python3移动矩形

问题描述

我正在尝试在pygame中移动一个矩形 这是我要开始工作的代码

currBlock1 = pygame.draw.rect(surface,(0,255,255),(340,50,60,30))
currBlock2 = pygame.draw.rect(surface,(310,80,30))
currBlock1.move(340,80)
currBlock2.move(310,110)

这是怎么了?

解决方法

pygame.Rect.move不会移动矩形本身。该方法返回一个新的并移动的矩形。您必须使用就地运行的 pygame.Rect.move_ip。此外,move / move_ip的参数是偏移量而不是位置:

currBlock1.move_ip(0,30)
currBlock2.move_ip(0,30)

实际上,您在每一帧中都重新创建了相同的矩形。您需要在应用程序循环之前构造pygame.Rect()对象,并且必须在循环中移动它:

currBlock1 = pygame.Rect(340,50,60,30)
currBlock2 = pygame.Rect(310,80,30)

# application loop
while run:

    # [...]

    pygame.draw.rect(surface,(0,255,255),currBlock1)
    pygame.draw.rect(surface,currBlock2)
    currBlock1.move_ip(0,30)
    currBlock2.move_ip(0,30)