系列目录:
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()方法来获得资源的输入流,并将数据解析成一个我们所需要的对象。
分享到:
相关推荐
com.jme3.animation com.jme3.app com.jme3.app.state com.jme3.asset com.jme3.asset.pack com.jme3.asset.plugins com.jme3.audio com.jme3.audio.joal ...jme3tools.preview
游戏开发引擎JME3中文翻译文档,简单点例子分享
JME是一个高性能的3D图形API,采用LWJGL作为底层支持。它的后续版本将支持JOGL。JME和Java 3D具有类似的场景结构,开发者必须以树状方式组织自己的场景。JME有一套很好的优化机制,这使得它得运行速度要比Java 3D快...
NULL 博文链接:https://hjk685.iteye.com/blog/767080
JME3-JFX 用于 JME 的 JFX Gui 桥接器,具有用于常见用例的有用实用程序。 许可证是新的 BSD 许可证(与 JME3 相同) 二进制版本可在以下位置获得: ( ) ( ) 它也可以用作 maven 存储库(请参阅“设置我”按钮)。 ...
NULL 博文链接:https://hjk685.iteye.com/blog/2181913
jme3-clj-aide JMonkeyEngine3 + Clojure-Android + AIDE 示例项目
NULL 博文链接:https://hjk685.iteye.com/blog/2297517
JME教程.rar
本人翻译水平有限,请大家包含,并希望能够给予指教。 本来就是给大家的资料所以我不喜欢要什么资源分,希望大家也上传时不要资源分
它还实现了强大的REPL模式,该模式允许您交互使用JME库实现的大多数语言功能,包括CSV,HTML,JSON和XML导入和导出。 可以在以下页面上查阅用户和开发人员文档:...
主要内容是介绍如何使用 jMonkeyEngine 进行游戏开发,旨在帮助初学者快速理解 jMonkeyEngine 中的核心概念,自己学习做的一些笔记,有不完美之处,还请见谅
基于jmonkeyengine游戏引擎,纯java开发,单机3d小游戏demo
JME程序设计实例教程 JME程序设计实例教程 JME程序设计实例教程
本文档介绍jme的文件格式及支持的文件格式
JME Molecular Editor结构式在线编辑器
此试题涵盖了jme的所有知识点,适合于中级人员水平的测试,包括多线程、socket、游戏开发、记录管理系统、低级事件、高级UI、无线消息、个人信息管理等内容
jme3-样板 jMonkeyEngine 3.0 项目的 gradle 样板 桌面+安卓构建 maven 满足 jme3 依赖项 android sdk 必须在local.properties提供 安卓依赖 android sdk 构建工具 21.1.1 android 支持存储库 8 安卓支持库 21.0.1...
标签:ant-jme.jar.zip,ant,jme,jar.zip包下载,依赖包