如何创建多个矩形对象?
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()
我正在尝试制作像 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()