1、存储和读取用户数据:cc.sys.localStorage
cc.sys.localStorage 接口是按照 Web Storage API 来实现的,在 Web 平台运行时会直接调用 Web Storage API,在原生平台上会调用 sqlite 的方法来存储数据。用户不用关心内部实现。
// 存储数据
cc.sys.localStorage.setItem(key, value)
// 读取数据
cc.sys.localStorage.getItem(key)
// 移除键值对
cc.sys.localStorage.removeItem(key)
2、自定义事件监听器
// 注册指定事件名的自定义事件监听器
cc.director.on('key', this.function, node);
// 删除指定事件名的自定义事件监听器
cc.director.off('key', this.function, node);
// 通过指定事件名发送自定义事件
cc.director.emit('key', data);
3、通过常驻节点进行场景资源管理和参数传递
引擎同时只会运行一个场景,当切换场景时,默认会将场景内所有节点和其他实例销毁。如果需要用一个组件控制所有场景的加载,或在场景之间传递参数数据,就需要将该组件所在节点标记为「常驻节点」,使它在场景切换时不被自动销毁,常驻内存。使用以下接口:
cc.game.addPersistRootNode(myNode);
上面的接口会将 myNode 变为常驻节点,这样挂在上面的组件都可以在场景之间持续作用,可以用这样的方法来储存玩家信息,或下一个场景初始化时需要的各种数据。
如果要取消一个节点的常驻属性:
cc.game.removePersistRootNode(myNode);
需要注意的是上面的 API 并不会立即销毁指定节点,只是将节点还原为可在场景切换时销毁的节点。
检查节点是否是常驻根节点:
cc.game.isPersistRootNode(myNode);
4、资源的释放【资源的依赖和释放】
// 直接释放某个贴图
cc.loader.release(texture);
// 释放一个 prefab 以及所有它依赖的资源
var deps = cc.loader.getDependsRecursively('prefabs/sample');
cc.loader.release(deps);
// 如果在这个 prefab 中有一些和场景其他部分共享的资源,你不希望它们被释放,可以将这个资源从依赖列表中删除
var deps = cc.loader.getDependsRecursively('prefabs/sample');
var index = deps.indexOf(texture2d._uuid);
if (index !== -1) deps.splice(index, 1);
cc.loader.release(deps);
5、检查该对象是否不为 null 并且尚未销毁:cc.isValid(object)
检查该对象是否不为 null 并且尚未销毁。当一个对象的 destroy
调用以后,会在这一帧结束后才真正销毁。因此从下一帧开始 isValid
就会返回 false,而当前帧内 isValid
仍然会是 true。如果希望判断当前帧是否调用过 destroy
,请使用 cc.isValid(obj, true)
,不过这往往是特殊的业务需求引起的,通常情况下不需要这样。