`
windybell
  • 浏览: 14872 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JME3资源管理之一:核心组件介绍

 
阅读更多
系列目录:
JME3资源管理之一:核心组件介绍
JME3资源管理之二:AssetLoader和AssetLocator
JME3资源管理之三:资源加载流程
JME3资源管理之四:心得和小节

1、AssetManager

这是JME3资源管理器的核心接口,它提供了统一的方式来管理各种资源。

(1) 注册资源加载器
public void registerLoader(Class loaderClass, String ... extensions)


根据后缀名来注册资源加载器。没有注册过的资源类型是无法被AssetManager识别的。
例:
am.registerLoader(AWTLoader.class, "jpg");
am.registerLoader(WAVLoader.class, "wav");


(2) 注册资源定位器
public void registerLocator(String rootPath, Class locatorClass)


注册资源位置,以及定位器。加载资源的时候,AssetManager会到注册过的位置来查找资源。
例:
am.registerLocator("/", ClasspathLocator.class);
am.registerLocator("res/models.zip", ZipLocator.class);


(3) 定位资源位置
public AssetInfo locateAsset(AssetKey<?> key)


这个方法将根据AssetKey中的路径,按顺序遍历所有注册过的资源位置,直到查询到了一个匹配的资源为止。
如果找到了资源,就会返回一个AssetInfo对象,否则将返回null。
AssetInfo对象包含了资源的InputStream,我们可以直接解析资源数据,也可以通过AssetLoader来加载资源。

(4) 加载资源
public <T> T loadAsset(AssetKey<T> key);


这个方法用于加载资源,具体的加载过程我们后面再详细分析。
AssetKey中包含了资源的后缀名,若该资源类型的AssetLoader没有在AssetManager中注册过,程序就会抛出异常。

2、AssetKey

AssetKey是用来从缓存中寻找资源的钥匙,可以使用资源路径来构造一个AssetKey。
AssetKey = new AssetKey("Common/MtlDefs/Misc/Unshaded.j3md");


一旦资源路径设置完成后,它的值就无法改变了,因为AssetKey没有提供任何方法来修改资源路径。
AssetKey会自动帮我们计算资源的后缀名、文件夹。
(1) 资源全路径
引用
public String getName()

返回资源的全路径。
例:"Common/MtlDefs/Misc/Unshaded.j3md"

(2) 资源文件夹
public String getFolder()

返回资源所在的文件夹。
例:"Common/MtlDefs/Misc/"

(3) 资源后缀名
后缀名不分大小写。
public String getExtension()

例:"j3md"

(4) 资源的缓存类型
public Class<? extends AssetCache> getCacheType()

资源加载的同时,会在缓存中保存一份,防止直接被GC回收。
AssetKey默认使用SimpleCacheType,这意味着直接使用JME3自带的AssetKey的话,我们就需要自己手动去释放缓存。。

(5) 资源加载后的处理器
public Class<? extends AssetProcessor> getProcessorType()

默认为null
jpg、tga等图片资源作为纹理加载时,首先会变成一个Image对象。通过TextrueProcesser处理后才会变成一个程序中所需要的Texture对象。

3、AssetLocator

AssetLocator是一个接口,用于从指定位置查询资源信息。

(1)资源根目录
public void setRootPath(String rootPath)

资源定位器允许我们在指定一个资源加载的根路径。
定位资源的时候,调用AssetKey的getName()方法可以获得资源在这个根目录中的相对位置。

举个例子:注册一个ZipLocatoer,设置资源根目录为"res/models.zip"。查找资源"img/avatar.png"的时候,这个ZipLocatoer就会在models.zip文件找去查询img/avatar.png文件。

(2)定位资源
public AssetInfo locate(AssetManager manager, AssetKey key)

在AssetLocator定位了资源位置后,将会返回一个AssetInfo对象。

4、AssetInfo

AssetInfo是AssetLocater定位资源后返回的结构,其中提供了指定资源的InputStream。

(1)资源数据
public abstract InputStream openStream();

AssetInfo是一个抽象类,调用openStream()方法即可获得资源的InputStream,通过这个InputStream就可以读取实际的资源数据了。

(2)getKey
public AssetKey getKey()

通过这个方法可以获得资源的AssetKey

(3)getManager
public AssetManager getManager()

通过这个方法可以获得加载该资源的AssetManager

5、AssetLoader

AssetLoader用于加载指定类型的资源,资源类型通过文件的后缀名来匹配。


AssetLoader接口中只有一个用于加载的接口:
public Object load(AssetInfo assetInfo) throws IOException;

AssetLoader将调用AssetInfo的openStream()方法来获得资源的输入流,并将数据解析成一个我们所需要的对象。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics