Pygame如何改变表面的大小?

发布于 2024-11-17 01:02:08 字数 297 浏览 0 评论 0原文

如何更改 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))

How do you change the size of a surface in pygame that has an image (not scaling). When I load an image in pygame the surface becomes the size of the image. I need to change the size of the surface to be the size of a frame (sprite sheet).

Here is code I used to solve issue (thanks to Chris Dennett):

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深白境迁sunset 2024-11-24 01:02:08

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

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

当位图传输时,使用源矩形参数。这只会从纸张上复制一帧。

2) 使用地下。

将精灵表加载为一个表面。
加载所需的每个帧的地下: http://www. pygame.org/docs/ref/surface.html#Surface.subsurface

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

来自文档:

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

For sprite sheets, you have 2 good options.

1) Load spritesheet as one Surface.

When blitting, use the source rect argument. This will blit just one frame, from the sheet.

2) Use subsurfaces.

Load spritesheet as one Surface.
Load a subsurface, of each frame you want : http://www.pygame.org/docs/ref/surface.html#Surface.subsurface

As far as you are concerned, the subsurface is a 'new' surface, with the width and height of the cell. But, it's not duplicate memory. It's linked.

From the docs:

Returns a new Surface that shares its pixels with its new parent. The
new Surface is considered a child of the original. Modifications to
either Surface pixels will effect each other. Surface information like
clipping area and color keys are unique to each Surface.

黯然 2024-11-24 01:02:08

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

Create a new surface, passing in the desired width and height as arguments (i.e., how big the sprite is). Then use newsurf.blit(spritesheet, (0, 0), (posX, posY, newsurf.getWidth(), newsurf.getHeight())). Should work. Then you can use newsurf as your sprite. posX and posY should be the x and y you want to blit from in your sprite sheet respectively.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文