青瓷引擎如何加载游戏资源?这边游戏资源是有两种加载方式的,包括引用预先加载和手工动态加载。具体方法绿盟小编整理了以下「青瓷引擎游戏资源管理教程」为您详细解读:
- 引用预先加载
引用预先加载指游戏资源在场景编辑和预制编辑中进行引用关联,当游戏运行或场景切换时,这引用资源会自动预先载入。
引用图片资源:
直接使用UIImage组件,或者在脚本中定义meta类型为qc.Serializer.TEXTURE的字段。

引用动画资源:
直接使用Sprite组件,或者在脚本中定义meta类型为qc.Serializer.TEXTURE的字段。

引用声音资源:
直接使用Sound组件,或者在脚本中定义meta类型为qc.Serializer.AUDIO的字段。

引用字体资源:
直接在UIText组件中设置,或者在脚本中定义meta类型为qc.Serializer.FONT的字段。

引用预制资源:
在脚本中定义meta类型为:qc.Serializer.PREFAB的字段。
引用Excel资源:
在脚本中定义meta类型为:qc.Serializer.EXCELASSET的字段。
引用文本资源:
在脚本中定义meta类型为:qc.Serializer.TEXTASSET的字段。

- 手工动态加载
对于一些可变资源,或者不希望进入游戏就加载的资源,可以通过代码,使用game.assets.load进行异步加载。 例如:
载入一个图片资源:
self.game.assets.load('Assets/texture/texture.bin', function(r) {
self.game.world.find('UIRoot/background').texture = r;
});
载入一个声音资源:
self.game.assets.load('Assets/audio/newlevel.mp3.bin', function(r) {
// 找到一个播放声音的节点,并设置播放
var soundCtrl = self.game.world.find('Sound');
soundCtrl.audio = r;
soundCtrl.play();
});
载入一个动画资源:
self.game.assets.load('Assets/sprites/panda.bin', function(r) {
// 找到一个动画播放的节点,并设置播放动画
var spriteCtrl = self.game.world.find('Sprite');
spriteCtrl.texture = r;
spriteCtrl.playAnimation('atk2', 1, false);
});
载入一个WebFont字体
self.game.assets.load('Assets/font/HK.bin', function(r) {
// 载入一个字体,找到一个文本节点,并设置字体
var textCtrl = self.font.find('UIText');
textCtrl.fontFamily = qc.UIText.WEBFONT;
textCtrl.font = r;
});
载入一个预制
self.game.assets.load('Assets/prefabs/prefab.bin', function(r) {
// 通过预制创建一个节点到脚本挂载的节点下
self.game.add.clone(r, self.gameObject.find('list'));
});
载入一个Excel资源
self.game.assets.load('Assets/excel/mother.bin', function(r) {
// 打印Excel中的所有表名
console.log(r.sheetsName.join(','));
});
载入一个Json格式的文本资源
self.game.assets.load('Assets/excel/mario_map.bin', function(r) {
// 打印Json文本资源的内容
console.log(r.text);
});
- 资源释放
一般我们建议采用引用预先加载的方式,对于采用手工动态加载的资源,建议将ulr作为key方便维护:
// load只带一个参数时key和url相同
self.game.assets.load('Assets/sprites/panda.bin');
资源被加载后,就常驻在内存,两种方式可以释放资源:
调用unload接口,明确告知需要释放资源
self.game.assets.unload('Assets/sprites/panda.bin');
切换场景时,明确告知将旧场景资源全部清理掉:
// 第二个clear参数为true将清除所有旧的资源
self.game.scene.load('nextState', true);
*需要注意的是,如果场景中有其他对象还引用本资源,资源是不会被立即回收的。当资源不被引用时自动进行垃圾回收。
文章来自绿盟(xDowns.com)转载请注明来路。
上一篇文章:Apple Seeds 版本6的iOS9.3,OS X10.11.4和watchOS2.2公共测试版 []