Pygame “'pygame.Surface' 对象的 'set_at' 不适用于 'tuple' 对象”

Pygame "'set_at' for 'pygame.Surface' objects doesn't apply to 'tuple' object"

我正在编写一个基本程序,该程序从文件中读取数据,其中每个字符代表一个像素的颜色,然后使用 pygame 在屏幕上显示该信息。

我有一段代码可以读取文件,效果很好,但是当我尝试一个一个地显示像素时,我收到一个错误 "descriptor 'set_at' for 'pygame.Surface' objects doesn't apply to 'tuple' object"。 "Grid" 是一个二维数组,其中包含文件中的 0 和 1 数据。

print("Done processing file, Drawing pixels...")

for i in range(0, height - 2):
    for j in range(0, width - 2):
        if grid[i][j] == 0:
            pygame.Surface.set_at((i, j), "black") #Throws the error
        elif grid[i][j] == 1:
            pygame.Surface.set_at((i, j), "white")

print("Pixels drawn!")

我正在尝试使用 "i" 和 "j" 值来描述我要修改的像素的 "x" 和 "y",但是 pygame 似乎正在将其读取为与我想要的不同的数据类型?我不完全确定为什么 pygame 不期望坐标元组(对我来说似乎是笛卡尔坐标最合乎逻辑的数据类型)。

我是 pygame 的新手,所以我希望这是一个相对简单的错误并且可以轻松修复。如果您想要此特定功能的文档:https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_at

您的问题不是 (x,y),而是 pygame.Surface

您必须使用 class pygame.Surface 的实例,而不是 class pygame.Surface

surface = pygame.Surface((800,600))
surface.set_at((i, j), (255,255,255))

screen = pygame.display.set_mode((800,600))
screen.set_at((i, j), (255,255,255))

image = pygame.image.load('image.png')
image.set_at((i, j), (255,255,255))

font = pygame.font.SysFont(None, 50)
text = font.render("Hello World", True, (255,255,255))
text.set_at((i, j), (255,255,255))

您将遇到另一个颜色问题。它必须是元组 (R,G,B) - 如果您使用透明度(alpha 通道),最终 (R,G,B,A)

对于 white 它将是 (255,255,255),对于 black 它将是 (0,0,0)

要使用带名称的字符串,您必须使用 class pygame.color.Color(name)

screen.set_at((i, j), pygame.color.Color('white'))    

示例代码:

import pygame

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

#WHITE = pygame.color.Color('white')
WHITE = (255,255,255)

for x in range(100):
    for y in range(100):
        screen.set_at((350+x, 250+y), WHITE)

pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

pygame.quit()