`
windybell
  • 浏览: 15591 次
  • 性别: 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()方法来获得资源的输入流,并将数据解析成一个我们所需要的对象。
分享到:
评论

相关推荐

    JME3 中文教程(ZBP翻译第一版)

    1. **JME3基础知识**:介绍JME3的基本架构和组件,如何安装和配置开发环境,以及JME3的核心库和API。 2. **场景管理**:讲解如何创建和管理3D场景,包括节点、骨骼动画、光照、材质、纹理等元素的设置与交互。 3. ...

    JME程序设计实例教程

    Java Micro Edition(JME),又称为Java 2 Micro Edition,是Java平台的一个子集,主要用于开发和部署在资源有限的设备上的应用程序,如移动电话、PDA、智能家电等嵌入式系统。本教程以实例为导向,深入浅出地介绍了...

    JME教程.rar

    它不包含完整的Java SE类库,而是只包含了一组核心功能,如内存管理、线程、输入/输出和基本的网络支持。 MIDP是建立在CLDC之上的,提供了开发移动应用所需的特定功能,如用户界面组件、图形绘制、游戏支持和网络...

    JME商业游戏进阶二 (地表层的神秘面纱1)源代码

    JME提供了资源管理器,源码会解释如何使用它来管理模型、纹理和其他游戏资产。 通过深入研究这个"ditu_example"的源代码,开发者不仅能学习到JME的用法,还能掌握游戏开发中的许多核心概念和技术,这对于提升游戏...

    JME初级教程(持续跟新)

    7. **场景管理**:JME3的场景图是一种组织3D对象的方式,允许你方便地管理和操作游戏中的元素。理解节点、分支和组件的概念,以及如何通过脚本语言(如NiftyGUI)创建用户界面。 8. **音频处理**:JME3支持音频播放...

    JME试题及答案 socket 多线程 高级UI

    - **解析**:Canvas是JME中处理图形绘制的核心类之一,通常情况下,当Canvas上的UI元素发生变化时,系统会自动触发更新机制,无需显式调用任何方法。 **9. Alert设置超时时间的位置** 正确选项为 **A**:系统默认...

    JME学习文档—中文版.rar

    Java Micro Edition(JME),又称为Java ME或J2ME,是Java平台的一个子集,专为资源有限的嵌入式设备设计。JME提供了一种标准的框架,使得开发者可以编写可在各种移动设备、家电和其他小型计算设备上运行的应用程序...

    jme.rar_pcie

    在Linux操作系统环境下,设备驱动是连接硬件设备和操作系统内核的关键组件,使得操作系统能够有效地管理和使用硬件资源。此驱动专为 JMicron 的JMC2x0系列网络控制器设计,提供了在Linux系统下的网络功能支持。 ...

    JMonkeyEngine 中文教程

    JMonkeyEngine(JME)是一个强大的开源3D游戏引擎,专为Java开发者设计。这个中文教程旨在帮助初学者和有经验的程序员掌握JMonkeyEngine的使用,创建出引人入胜的3D游戏和应用程序。教程共分为12个章节,确保覆盖了...

    Jmonkey初学者教程

    - `Node`:介绍节点的概念,它是场景图的基本组成部分之一。 - `BoundingVolume`:了解边界体积,用于碰撞检测和优化渲染。 - `Sphere`:学习如何创建球体对象。 - `Color`:掌握颜色设置的方法。 - `...

    Media Browser on Android Platform

    - **移植难点**:指出在从JME向Android移植图形引擎时遇到的主要挑战,如API差异、资源管理和性能优化等。 ### 结论 该报告不仅提供了对Android平台与JME之间差异的全面理解,而且详细展示了图形引擎移植和Media ...

    jmonkeyengine纯Java编写的一个完整的3D游戏开发套件

    **核心组件** 1. **Scene Graph**:jMonkeyEngine使用一种类似XML的结构来组织3D对象,称为场景图,允许开发者方便地管理游戏中的物体、灯光、相机等元素。 2. **Rendering System**:渲染系统基于OpenGL,支持...

    hitchhikers:开源游戏项目

    在Hitchhikers项目中,开发者可以利用JME3的以下核心组件: 1. **场景图**:JME3的Scene Graph允许开发者通过节点树结构来组织游戏对象,简化了场景的管理和渲染。 2. **光照与材质**:JME3支持复杂的光照模型和...

    java私塾基础入门笔记

    1. **Java虚拟机(JVM)**:核心组件,负责解释执行字节码,提供运行时环境,管理内存并执行垃圾回收。 2. **垃圾回收**:自动管理内存,定期清理不再使用的对象,防止内存泄漏。 3. **代码安全**:多层防护机制确保...

    Java初级程序员面试必备的基础知识总结.docx

    Java虚拟机(JVM)是Java的核心组件,负责以下几个关键任务: - 加载和验证类文件,确保其符合Java规范。 - 解释字节码为机器码,执行程序。 - 执行垃圾回收,自动清理不再使用的内存,防止内存泄漏。 Java的安全性...

    java 游戏还可以蛮好玩的

    6. **资源管理**:游戏中的图像、音频等资源需要有效管理,避免内存泄漏和资源浪费。Java的ClassLoader和ResourceBundle可以帮助管理和加载资源。 7. **用户界面**:Java提供了丰富的UI组件,开发者可以构建吸引人...

    The Dalvik Virtual Machine

    Java 语言最初的目标是实现“一次编写,到处运行”(Write Once, Run Anywhere, WORA) 的理念,这一目标主要由 Java 平台实现,而 Java 平台的核心组件之一便是 Java 虚拟机 (JVM)。尽管这一目标在桌面 (JSE) 和...

    wxh根据SE教程的乒乓球游戏修改的游戏

    3. 3DTutorial09:这个文件可能是一个额外的资源文件,如配置文件、数据文件或是特定平台的执行文件,取决于游戏的实现。 从这个游戏中,我们可以学习到以下IT知识点: 1. **Java编程**:游戏是用Java语言开发的,...

    Dalvik虚拟机架构

    随着Android平台的兴起与发展,越来越多的应用程序开发者开始关注其核心组件之一——Dalvik虚拟机(Dalvik Virtual Machine, DVM)。不同于传统的Java虚拟机(Java Virtual Machine, JVM),DVM是专门为移动设备设计...

Global site tag (gtag.js) - Google Analytics