如何在Pygame中绘制精灵列表

0 投票
1 回答
1477 浏览
提问于 2025-04-18 03:21

我在问,是否可以在Pygame中绘制一个精灵列表,如果可以的话,应该怎么做?

我想从一个二维列表中绘制,这个列表会用来绘制地图。

import pygame

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)


screen_width = 700
screen_height = 400

screen = pygame.display.set_mode([screen_width, screen_height])


pygame.init()

image = pygame.image.load("Textures(Final)\Grass_Tile.bmp").convert()
imagerect = image.get_rect()

tilemap = [
          [image, image, image],
          [image, image, image]
        ]


done = False

clock = pygame.time.Clock()



while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(BLACK)

    screen.blit(tilemap, imagerect)    

    clock.tick(20)

    pygame.display.flip()


pygame.quit()

我知道我可以做一些更简单的事情,比如逐个绘制每个图像。但是,我在想,是否可以这样做,这样将来当我有更多的精灵时,我只需要添加到列表中,就可以创建地图。

谢谢!

1 个回答

0

我觉得你说的这个方法可能不太可行,不过如果这些地图图片不经常变化,我建议你可以先把所有的地图图片处理到一个pygame的表面上,这样以后就可以直接使用了,可以用类似这样的代码:

map_surface = pygame.Surface(( len(tilemap[0])*TILE_WIDTH, len(tilemap)*TILE_HEIGHT ))
for y,row in enumerate(tilemap):
    for x,tile_surface in enumerate(row):
        map_surface.blit(tile_surface,(x*TILE_WIDTH,y*TILE_HEIGHT))

然后之后你只需要简单地使用:

screen.blit(map_surface)

需要注意的是,即使你的地图有变化,你也只需要把变化的部分更新到map_surface这个表面上,而不需要重新创建整个地图。

撰写回答