应用资源

前面所提到的文件使用方式,一般都需要指定文件的绝对路径,或者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加载字体