沮丧的精灵 Sheet

Kivy Sprite Sheet

在 kivy 中有裁剪精灵 sheet 的方法吗?

例如,我有这个精灵 sheet:

而且我喜欢裁剪并创建一个单独的精灵列表。

像这样:

spriteList = []

spriteW, spriteH = (32, 32)
imgW, imgH = (320, 320)

col = imgW // spriteW 
row = imgH // spriteH

for x in range(col):
    for y in range(row):
        cropped = cropImg(spriteW * x, spriteH * y) #THIS FUNC IS AN EXAMPLE
        spriteList.append(cropped)

在 kivy 中有办法做到这一点吗?

我认为您希望将精灵 sheet 加载到纹理 (kivy.graphics.Texture) 中,然后在您的循环中使用精灵的纹理坐标创建一系列 TextureRegions。然后您可以通过矩形图形指令显示这些。

您还需要正确设置纹理的纹理插值,可能是'nearest'。

为了将来参考,Kivy 现在带有 Atlas 系统。

它只是一个 json 文件,其中文件的姓氏已更改为 .atlas

文件包含以下结构:

{
    "<basename>-<index>.png": {
        "id1": [ <x>, <y>, <width>, <height> ],
        "id2": [ <x>, <y>, <width>, <height> ],
        # ...
    },
    # ...
}

如您所见,非常简单,通过这种方式,您可以分割任何图像,甚至多个图像,为所有图像和动画创建一个来源。

显然,您可以编写一个函数来为您轻松完成这项工作,但 Kivy 也可以通过控制台命令自行完成这项工作:

python -m kivy.atlas <basename> <size> <list of images...>

然后导入单个 image-crops 只需将它们称为源,但使用 url 类语法:

Image(source='atlas://images/myatlas/id1')

因此,在此示例中,images 是文件夹,myatlas 是图集文件的名称(仅限名字),id 是您指定的特定 image-crop。

简单易懂的内容,请在此处阅读更多相关信息:https://kivy.org/docs/api-kivy.atlas.html