首页 > 解决方案 > 从 pygame 界面检索图像

问题描述

我正在使用pygame构建一个屏幕来创建一个网格界面(3 * 3),如下所示:

screen = pg.display.set_mode((width, height + 100), 0, 32) 

之后,我将图像粘贴到网格的 9 个可用点中的每一个,坐标posyposx网格上的参数如下所示:

screen.blit(img, (posy, posx))

有没有办法检索每个粘贴的图像?进一步处理图像的返回类型是什么?

编辑:你的意思是这样存储状态?

class Cell : 
    image = ''
    posX = 0
    posY = 0

谢谢你。

标签: pythonpygamepygame-surface

解决方案


如果您想问是否:在 9 幅图像被blit()编辑到之后,screen您是否可以稍后以某种方式询问每个区域的screen哪些图像被blit()编辑,那么不会。这screen只是一堆被blit()s 设置为特定值的像素。它不知道这些值是从哪里来的。

你必须自己跟踪。我建议创建一个单元格对象,其中 9 个实例构成您的网格,并保留网格中 9 个区域中的每一个的状态,包括该区域的图像。您可能会发现子类化Sprite很有用。

编辑:

例如,您可以为Cell

class Cell():
    def __init__(self, pos, image, row, column):
        self.image = image
        self.rect = pygame.Rect(pos, image.get_size())
        self.row = row
        self.column = column

或者如果你以后想用它做更多的事情(我不会在这里包括),你可能想像这样子类化 Sprite

class Cell(pygame.sprite.Sprite):
    def __init__(self, pos, image, row, column):
        super().__init__()
        self.image = image
        self.rect = pygame.Rect(pos, image.get_size())
        self.row = row
        self.column = column

在任何一种情况下,您都可能会向类添加更多内容,但在第一个示例中,即使这种有限的方式也允许您将每个实例的所有状态信息保存在一起。使用只有 the__init__()而没有其他方法的类有点像 C 中的结构,它允许您组织和构造数据。


推荐阅读