Appearance
存档
在使用 LmCode(代码模式)制作的场景时,会有场景内存档的需求,我们需要将场景内的数值字符串进行储存,以便在后续的场景中进行读取。
手动存档
参数详情
普通存档,一般为用户手动触发存储 LM.save(index:number,hiddenTip?:boolean,callback?: Function)
| 参数 | 类型 | 说明 |
|---|---|---|
| index | number | 存档索引,第几个存档,从1开始,存储后读取时也需要使用这个索引 |
| hiddenTip | boolean | 隐藏存档提示框,默认是false,显示提示框,存档时会有提示,true则不显示提示框 |
| callback | Function | 存档回调,存档成功后调用 |
存档相关流程
LM.save触发存档->调用Scene的onSave方法->onSave返回存档数据,引擎对场景进行截图(截图会去除isSaveScene为true的scene)-> 提示存档成功->调用callback方法
自动存档
自动存档是指在项目中触发存档的操作,一般为关键节点自动触发存档,调用即存。重新进项目时默认使用自动存档内容。
参数详情
直接调用LM.autoSave()即可。
流程
于手动存档几乎一致。
LM.autoSave触发存档->调用Scene的onSave方法->onSave返回存档数据,引擎对场景进行截图(截图会去除isSaveScene为true的scene)
需要存储什么数据?
读档后不会调用scene的init方法,只能在onRestore中拿到onSave返回的数据,所以需要按照项目的需求,将数据进行整理,在onSave中返回。
示例
比如,有一个是否胜利的变量,在读档后仍需要使用这个变量,具体代码如下
typescript
@LM.Class("MyScene")
class MyScene extends LM.Scene {
// 是否获得胜利
isWin: boolean = false;
// 显示结果的文本
resultLabel:LM.TextView;
init() {
// 是否获得胜利
this.isWin = (Math.random() > 0.5)
// 初始化胜利文本
this.initResultLabel();
}
initResultLabel(){
this.resultLabel = new LM.TextView();
this.resultLabel.fontSize = 40;
this.resultLabel.fontColor = "#ff0000"
// 显示结果
this.resultLabel.text = this.isWin ? "胜利":"失败";
this.addChild(this.resultLabel);
}
onSave() {
// 存档返回 胜利状态
return {
isWin:this.isWin
}
}
onRestore(data: any): void {
// 恢复胜利状态
this.isWin = data.isWin;
// 显示结果文本
this.initResultLabel();
}
}