Pygame 绘制矩形时出现问题

Pygame touble when drawing a rectangle

所以,我随机生成一个 "world" 并用 pygame 绘制它。那部分工作得很好,直到我决定在我已经画的东西之上添加一些东西。

代码如下。每件事是什么并不重要,但 DISPLAY 是我正在处理的表面,y.colour 是一个大小为 3 的元组,y.coord 是一个 (x,y) 元组

for x in W_Map:
    for y in x:
        DISPLAY.fill(y.colour, pygame.Rect(y.coord[0]-tile_size, 
                                           y.coord[1]-tile_size, 
                                           y.coord[0]+tile_size, 
                                           y.coord[1]+tile_size))  

DISPLAY.fill(lime, pygame.Rect(300,300,310,310))

根据上面的游戏,这应该创建一个以 305x305 为中心的石灰色 10x10 正方形。结果却是如下图:

如您所见,代码的第一部分完美地绘制了地形,但是在已绘制的内容之上创建石灰方块时,它变得完全疯狂。整个函数是:

pygame.init()
DISPLAY = pygame.display.set_mode(
    (shape[0]*2*tile_size, shape[1]*2*tile_size))
DISPLAY.fill((0,0,0))
#Make and draw the Rects
for x in W_Map:
    for y in x:
        DISPLAY.fill(y.colour, pygame.Rect(y.coord[0]-tile_size, 
                                           y.coord[1]-tile_size, 
                                           y.coord[0]+tile_size, 
                                           y.coord[1]+tile_size))  

DISPLAY.fill(lime, pygame.Rect(300,300,310,310))

Pygame 的 Rect 有四个参数:x、y、宽度和高度,其中 x 和 y 是相对于视口左上角的。您的 lime 矩形是用 pygame.Rect(300,300,310,310) 创建的,这意味着宽度和高度为 310 像素,位置为 (300, 300).

要创建一个以 (305, 305) 为中心的 10x10 矩形,您需要使用 pygame.Rect(300, 300, 10, 10)。您还可以创建一个辅助函数来将大小和中心点转换为必要的矩形参数:

def center_rect(x, y, width, height):
    return pygame.Rect(x - width / 2, y - height / 2, width, height)

然后你可以像这样使用这个辅助函数:

DISPLAY.fill(lime, center_rect(305, 305, 10, 10))