如何创建多个矩形对象?

How can I create multiple rect objects?

我正在尝试制作像 pygame 中那样的方块生成器。我已经使用列表来存储 x 和 y 变量,但是如果不使用诸如 rect1、rect2 之类的变量,我就无法用这些创建矩形...我如何使用列表或其他东西来拥有无限数量的矩形?

我的代码看起来像这样:

import pygame
from pygame.locals import *

screen = pygame.display.set_mode((800,600))

kares = []
karx = [0]
kary = [0]

karposx = 0
karposy = 0

k = 0

running = True
while running:

    # screen.fill((0,0,0))
    if k == 1:
        karx[0] = pygame.mouse.get_pos()[0]
        
        for i in range(len(karx)):
            a = [karx[i], kary[i]]
            kares.append(a)
        
        for i in kares:
            karposx = i[0]
            karposy = i[1]
            
        print(kares)
        k+=1
        
    rect1 = pygame.Rect(karposx,200,64,64)

        
    # for i in kares:
    #     kares[i][1] -= 1
        
        
        
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            
        if event.type == KEYDOWN:
            if event.key == K_RIGHT:
                k += 1
            
    if k >= 2:
        k = 0        
    
    if k == 1:
        pygame.draw.rect(screen, (255,0,0), rect1)
    pygame.display.update()
    

Output

您必须创建一个矩形列表。创建矩形并将它们添加到列表中:

rect = pygame.Rect(x, 200, 64, 64)
rects.append(rect)

循环绘制矩形:

for rect in rects:
    pygame.draw.rect(screen, (255,0,0), rect)

基于您的代码的最小示例:

import pygame
from pygame.locals import *

screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

rects = []

running = True
while running:
    clock.tick(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == MOUSEBUTTONDOWN:
            if event.button == 3:
                x, _ = event.pos
                x = (x // 64) * 64
                if not any(r for r in rects if r.x == x):
                    rect = pygame.Rect(x, 200, 64, 64)
                    rects.append(rect)
                    print(len(rects))

    screen.fill((0,0,0))
    for rect in rects:
        pygame.draw.rect(screen, (255,0,0), rect)
    pygame.display.update()

pygame.quit()