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

时间:2019-10-10 22:17:28

标签: python pygame pygame-surface

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

1 个答案:

答案 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()