我正在编写一个基本程序,该程序从文件中读取数据,每个字符代表一个像素的颜色,然后使用pygame在屏幕上显示该信息。
我有一段代码可以读取运行良好的文件,但是当我尝试逐个显示像素时,出现一个错误,提示“ pygame.Surface”对象的“ descriptor'set_at” '不适用于'元组'对象”。 “网格”是一个2D数组,具有文件中的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
答案 0 :(得分:1)
您的问题不是(x,y)
,而是pygame.Surface
。
您必须使用类pygame.Surface
的实例,而不是类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)
。
要使用名称字符串,您必须使用类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()