我使用pygame并绘制地图。我创建了一个类Tail并将Sprite所有图块添加到一个组中以一次绘制所有图块。现在我希望每个图块都有一个边框,但我不明白该怎么做。
我的代码的简化示例:
import pygame
from pygame.rect import Rect
from pygame.sprite import Sprite, Group
# Константы
TAIL_SIZE = 80
WIN_W = 800
WIN_H = 600
TAIL_COLOR = (127, 255, 212)
BORDER_COLOR = (0, 0, 0)
MAP_SIZE = (5, 7)
FPS = 60
class Tail(Sprite):
def __init__(self, x: int, y: int, w: int, h: int, group: Group):
Sprite.__init__(self)
self.color = TAIL_COLOR
self.image = pygame.Surface((w, h))
self.image.fill(self.color)
self.rect = Rect(x, y, w, h)
self.add(group)
self.border_color = BORDER_COLOR
pygame.init()
sc = pygame.display.set_mode((WIN_W, WIN_H))
game_map = pygame.sprite.Group()
clock = pygame.time.Clock()
# Создадим карту из тайлов
y = 0
for line in range(MAP_SIZE[0]):
x = 0
for rect in range(MAP_SIZE[1]):
big_x = x * TAIL_SIZE
big_y = y * TAIL_SIZE
Tail(x=big_x, y=big_y, w=TAIL_SIZE, h=TAIL_SIZE, group=game_map)
x += 1
y += 1
while True:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
game_map.draw(sc)
pygame.display.update()
clock.tick(FPS)
我可以按图块的数量分别绘制矩形,但我并没有想到我可以以某种方式简单地扩展我的类Tail,以便框架与图块一起绘制
UPD:
我试图在 class 中Tail添加一行pygame.draw.rect(self.image, self.border_color, self.rect, 1)。据我了解,这会在每个图像上绘制一个框架,但是出了点问题,该框架仅针对左上角的图块绘制。
您需要
Tail像这样更改类:pygame.draw.rect(self.image, self.border_color, self.rect, 1)没用,因为self.image- 这是我们绘制的表面。它的大小w为h除第一个之外的所有图块,x 和 y 坐标位于此表面的边界之外。在此框架上,您必须始终绘制坐标(0, 0)。为此,您可以创建一个单独的Rect(0, 0, w, h)并绘制它。