拆分图集可以使用pygame.Surface类的subsurface()方法,可以通过传入一个 Rect 对象来指定要拆分的位置和尺寸。下面用代码拆分每个瓦片图,将其放大两倍,并在窗口上显示。代码如下所示:
04\01\showTiles.py
|
import pygame
pygame.init() screen = pygame.display.set_mode((600, 400)) pygame.display.set_caption("显示瓦片图")
# 填充白色背景 screen.fill((255, 255, 255))
# 加载图集 tileMap = pygame.image.load("tile_set.png").convert_alpha()
# 设置瓦片大小 tileWidth = 16 tileHeight = 16
# 获取的宽度和高度 mapWidth, mapHeight = tileMap.get_size()
# 计算每行每列的瓦片数量 numCols = mapWidth // tileWidth numRows = mapHeight // tileHeight
# 拆分并显示所有瓦片 for row in range(numRows): for col in range(numCols): # 拆分瓦片 tileSurface = tileMap.subsurface(col * tileWidth, row * tileHeight, tileWidth, tileHeight) # 放大两倍 scaledTileSurface = pygame.transform.scale(tileSurface, (tileWidth * 2, tileHeight * 2)) screen.blit(scaledTileSurface, (col * (tileWidth + 5) * 2, row * (tileHeight + 2) * 2)) # 间距5
# 更新窗口显示 pygame.display.flip()
# 游戏循环 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False
# 退出 Pygame pygame.quit()
|
首先,用pygame.image.load("tile_set.png")载入png图片,然后立即使用convert_alpha()方法转换透明度信息。对于 PNG 图片,建议在载入后立即进行转换,以提高渲染性能。接下来,使用 subsurface()方法根据每个瓦片图的位置和尺寸拆分出瓦片,得到一个 Surface 对象。这个 Surface 对象可以进行进一步的处理转换,例如使用 pygame.transform.scale 方法将图片放大两倍,第二个参数是一个元祖格式(width, height),表示新尺寸。最后,使用 blit 方法绘制这个 Surface 对象,第二个参数指定绘制的位置(左上角坐标)。
运行程序,画面如图4‑4所示。

图4‑4拆分瓦片图