应用资源
前面所提到的文件使用方式,一般都需要指定文件的绝对路径,或者pyglet会从当前工作路径中去寻找指定文件。这些情况下都不是应用自带资源的使用方式,因为应用自带资源一般都是与可执行文件放在一起,其绝对路径是变化的,并且当前工作路径也是不确定的。所以加载应用的自带资源,就只能使用以下方式:
import os
script_dir = os.path.dirnamr(__file__)
path = os.path.join(script_dir, 'logo.png')
logo_image = pyglet.image.load(path)
每次都使用这样的语句来加载资源是相当繁琐的,所以pyglet提供了资源模块resource
。以上语句如果改用资源模块来加载,就会变成logo_image = pyglet.resource.image('logo.png')
。
资源的所在路径,可以使用pyglet.resource.path = []
来设定,其可以接受一个字符串列表,用来指定资源的搜索路径。在设定资源搜索路径之后,需要使用pyglet.resource.reindex()
来将资源内容重新索引。
一个比较特殊的资源是用户配置目录,这个目录在不同的系统中对应的位置也不相同,但是在pyglet中的对待是相同的,都是使用pyglet.resource.get_setting_path('appName')
来获取。需要注意的是,pyglet并不保证这个目录一定存在,所以在使用前需要确定并创建这个目录。
一个应用中可以使用多个资源加载器(Loader),资源加载器之间是相互独立的,不会共享资源缓存内容。资源加载器可以使用pyglet.resource
中的全部资源加载方法。资源加载器可以使用loader = pyglet.resource.Loader([标示字符串])
的格式来完成创建。
pyglet资源常用的加载方法主要有以下这些。
资源加载 | 对应文件加载 | 返回类型 | 功能 |
---|---|---|---|
.file() | open() | 文件对象 | 加载指定的文件 |
.image() | image.load() | Texture,TextureRegion | 加载图像 |
.texture() | image.load() | Texture | 加载材质 |
.animation() | image.load_animation() | Animation | 加载动画 |
.media() | media.load() | Source | 加载媒体资源 |
.text() | text.load() | UnformattedDocument | 加载无格式文本 |
.html() | text.load() | FormattedDocument | 加载格式文本 |
.attributed() | text.load() | FormattedDocument | 加载属性文本 |
.add_font() | font.add_font() | None | 加载字体 |