Python 在pygame中生成任意数量的矩形
我以为你们能帮我解决这个问题。我希望能够生成矩形并将图像分配给这些矩形。我在整个项目中都在这样做,这并不难。这里最困难的部分是,我希望这个特殊的函数能够生成任意多个不同的矩形。这个项目是一个在棋盘上进行的游戏。我想我可以写得像。。。每个空间的if语句和then在函数中都有无数个参数,指示生成哪些rect以及在哪里生成,但我希望有人能想出一个更优雅的解决方案 可以使用两个嵌套的“for”循环-- 然后,要获得左上角的矩形,可以执行Python 在pygame中生成任意数量的矩形,python,pygame,rect,Python,Pygame,Rect,我以为你们能帮我解决这个问题。我希望能够生成矩形并将图像分配给这些矩形。我在整个项目中都在这样做,这并不难。这里最困难的部分是,我希望这个特殊的函数能够生成任意多个不同的矩形。这个项目是一个在棋盘上进行的游戏。我想我可以写得像。。。每个空间的if语句和then在函数中都有无数个参数,指示生成哪些rect以及在哪里生成,但我希望有人能想出一个更优雅的解决方案 可以使用两个嵌套的“for”循环-- 然后,要获得左上角的矩形,可以执行棋盘[0][0]。要获得右上角的矩形,可以执行棋盘[0][7] 您无
棋盘[0][0]
。要获得右上角的矩形,可以执行棋盘[0][7]
您无法显式地命名每个rect,但同样,您真的不需要这样做
注意:我假设您想要创建一个类似棋盘的矩形模式。如果你详细说明你想做什么,我可以编辑我的问题
class ChessTile(pygame.sprite.Sprite):
def __init__(self, image, location):
pygame.sprite.Sprite.__init__(self)
self.image = image.convert()
self.mask = pygame.mask.from_surface(self.image)
self.rect = pygame.Rect(location, self.image.get_size())
然后制作另一个名为“MakeBoard”的方法。调用MakeBoad并根据电路板的大小进行循环设置。所以伪代码应该是:
(假设“img”是一个32x32的白色或黑色正方形)
然后,只需绘制平铺对象,就像在某些渲染方法中使用法线一样
希望有帮助 我刚刚想到了一个可能的解决方案,使用一个带有参数的for循环,告诉它我要生成多少个矩形,但我仍然停留在如何命名这些矩形上?有没有办法用变量来命名变量?喜欢Rect(+x),然后像循环中的x+1那样执行。所以应该是Rect1、rect2等等。您可以创建一个包含
Rects
的常规列表。但既然您使用的是Rect和Surface,那么您最好使用一个包含.Rect和.image的Sprite
s列表,这样就创建了一个包含64个Rect的列表,我可以通过棋盘[x][y]?@user2765554来引用它——关闭,可以通过执行Chessboard[y][x]
来引用它。如果您交换for循环的顺序,以便一次添加一列,而不是一次添加一行,您可以通过执行棋盘[x][y]
来引用它。希望您仍然在。当我刚刚尝试copypasta时,它在chessboard.append上给了我无效的语法,突出显示chessboard@user2765554--啊,对不起。我忘了在上面一行加上括号。现在应该修好了。
class ChessTile(pygame.sprite.Sprite):
def __init__(self, image, location):
pygame.sprite.Sprite.__init__(self)
self.image = image.convert()
self.mask = pygame.mask.from_surface(self.image)
self.rect = pygame.Rect(location, self.image.get_size())
for y in range(0,7):
for x in range(0,7):
# alternate the tile image from black/white before calling ChessTile with it
# the location parameter is going to be x*32,y*32.. something like that
# so you'd have a tile at (0,0) then at (32,0), then (64,0), etc...
# after the first "j" run is done, "i" increments so now we have
# (0, 32), (32, 32), etc etc.
#
tile = ChessTile(img, (x,y))