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()
我正在编写一个基本程序,该程序从文件中读取数据,其中每个字符代表一个像素的颜色,然后使用 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()