3

如何在 pygame 中更改具有图像(不缩放)的表面的大小。当我在 pygame 中加载图像时,表面变成图像的大小。我需要将表面的大小更改为框架(精灵表)的大小。

这是我用来解决问题的代码(感谢 Chris Dennett):

self.surface = pygame.Surface((20, 20))
self.surface.blit(pygame.image.load(imageName).convert_alpha(), (0,0), (0, 0, frameWidth, frameHeight))
4

2 回答 2

4

对于精灵表,您有 2 个不错的选择。

1) 将 spritesheet 作为一个 Surface 加载。

blitting 时,使用源 rect 参数。这将只从工作表中删除一帧。

2) 使用次表面。

将 spritesheet 作为一个 Surface 加载。加载您想要的每一帧的次表面:http: //www.pygame.org/docs/ref/surface.html#Surface.subsurface

就您而言,次表面是一个“新”表面,具有单元格的宽度和高度。但是,它不是重复的内存。它是链接的。

从文档:

返回一个与其新父级共享其像素的新 Surface。新 Surface 被视为原始 Surface 的子级。对任一表面像素的修改将相互影响。剪切区域和颜色键等表面信息对于每个表面都是唯一的。

于 2011-09-22T03:58:24.150 回答
3

创建一个新表面,传入所需的宽度和高度作为参数(即精灵有多大)。然后使用newsurf.blit(spritesheet, (0, 0), (posX, posY, newsurf.getWidth(), newsurf.getHeight())). 应该管用。然后你可以使用 newsurf 作为你的精灵。posX并且posY应该是您要分别在精灵表中进行 blit 的 x 和 y。

于 2011-06-26T21:25:55.460 回答