pygame.Surface.set_at() 如何在 for 循环中工作?

问题描述

我正在为像素艺术编写代码,并将 Surface 保存为文件。但是 .set_at() 方法似乎不起作用。

liftA2

tl;博士:

我有一个矩形网格(实际上是 SelectRects),用于存储颜色。当我导出时,我遍历这些矩形并将 export_surface 上的相应像素更改为该颜色。 这似乎不起作用。我试图画一个半径为 1 的圆,但这也不起作用。

解决方法

如果曲面的大小为 32 x 32,则坐标 (32,32) 越界。左上角像素坐标为(0,0),右下角像素坐标为(31,31):

export_surf.set_at((32,32),CYAN)

export_surf = pygame.Surface((32,32))
export_surf.set_at((31,31),CYAN)

坐标 (rect.x, rect.y) 也越界,因为 rect 指定了屏幕上的位置。

您必须将 (rect.x, rect.y) 除以图块的大小:

export_surf.set_at((rect.x // TILE_SIZE,rect.y // TILE_SIZE),rect.colour)

export_surf.set_at((rect.x,rect.y),rect.colour)