【问题标题】:Kivy Sprite SheetKivy 精灵表
【发布时间】:2015-11-26 09:06:29
【问题描述】:

有一种方法可以在 kivy 中裁剪精灵表吗?

例如,我有这个精灵表:

我喜欢裁剪并创建一个分离的精灵列表。

像这样:

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 中有办法做到这一点吗?

【问题讨论】:

    标签: python-3.x kivy


    【解决方案1】:

    为了将来参考,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...>
    

    然后导入单个图像裁剪只需将它们称为源,但使用类似 url 的语法:

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

    因此,在此示例中,images 是文件夹,myatlas 是 atlas 文件的名称(仅限名字),id 是您为特定图像裁剪提供的 id。

    简单易懂的东西,在这里阅读更多信息:https://kivy.org/docs/api-kivy.atlas.html

    【讨论】:

      【解决方案2】:

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

      您还需要正确设置纹理的纹理插值,可能设置为“最近”。

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2013-10-23
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        相关资源
        最近更新 更多