如何在Pygame中使用精灵表?

9

啊呀!!!我对Python一窍不通,唯一能想到制作“动画”的方法就是使用单独的图片(即每个文件只有一个图像)。好吧,我拥有一张完美适合我需求的精灵表(sprite sheet),唯一的问题是这是一张精灵表。我不想花时间裁剪出每个单独的精灵。

更多信息:我是Python和Pygame的新手。在8月份开始学习这门语言,而且我所在的班级进度非常缓慢。如果您可以解释一下您正在做什么,以便我将来能够应用到其他项目上,我将感激不尽。另外,我使用的是Python3.2版本,如果这会有所影响,因为我相信Python2和Python3之间存在某些语法差异。

谢谢!!!这将对我很有帮助。


2
有一个很好的精灵表类,我认为非常棒(而且易于理解)... http://www.pygame.org/wiki/Spritesheet - Joran Beasley
你能否贴出一些出现问题的代码?另外,更详细地解释一下你想要做什么会更好(就我个人而言,我完全不知道精灵表是什么)。 - Aleksander Lidtke
1
将来,您可能想尝试使用Google或文档。在Google或pygame wiki中搜索“pygame sprite sheet”或整个问题标题,会出现Joran和我发现的链接作为第一个结果。这样做可以避免您编写那两个额外段落的需要。而且,Google可以在0.19秒内回答,而不像人类一样需要3分钟。此外,我们最终可能会让您的SO问题击败更有用的wiki页面,从而减慢每个人的速度。 - abarnert
1个回答

6
这并不是很难...但我在快速搜索中找到的最佳示例代码同时也是一个可以为您完成工作的可用库: spritesheet,直接来自pygame wiki。
因此,您可以先使用它。 我本来可以给你一个适合你用例的示例,但你没有告诉我们你的代码长什么样子,或者你想做什么,所以我无法提供比该页面更好的任何东西,所以:
import spritesheet
...
ss = spritesheet.spritesheet('somespritesheet.png')
# Sprite is 16x16 pixels at location 0,0 in the file...
image = ss.image_at((0, 0, 16, 16))
images = []
# Load two images into an array, their transparent bit is (255, 255, 255)
images = ss.images_at((0, 0, 16, 16),(17, 0, 16,16), colorkey=(255, 255, 255))
…

与此同时,您可以阅读spritesheet类中的(非常简单的)代码,以了解它的工作原理。


1
抱歉,如果这是一个非常愚蠢的问题,但您知道如何找出精灵表中的精灵位置吗?还是我只能尝试调整数值?比如说我需要在GIMP中查找数值吗? - Zaid Saeed
动画精灵表中的图像部分应具有固定大小。您需要做的就是根据其中的精灵数量将表的分辨率进行划分。如果精灵过多,只需使用一个简单循环进行解析即可。 - Sweeney Todd
有时候你需要微调它。 - Joran Beasley
@ZaidSaeed:对于所有图像大小相同的精灵表,很容易:只需将表的大小除以精灵数量(在每个方向上)。只要注意一些精灵表之间有间隔 - 例如,每行8个16x16精灵,精灵之间有1像素的边框,那么就是8 * 16 + 1 * 7 = 135,如果你只是简单地将135/8除,你会得到16.875,而你想要的是17。 - abarnert
@ZaidSaeed:对于包含不同大小精灵的精灵表,真的没有自动确定边界的方法;您必须靠肉眼观察,并在GIMP中自己写下值。有一些精灵表具有在表上未使用的颜色边框,理论上可以自动化处理,但代码并不简单... - abarnert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接