Skip to content

存档

在使用 LmCode(代码模式)制作的场景时,会有场景内存档的需求,我们需要将场景内的数值字符串进行储存,以便在后续的场景中进行读取。

手动存档

参数详情

普通存档,一般为用户手动触发存储 LM.save(index:number,hiddenTip?:boolean,callback?: Function)

参数类型说明
indexnumber存档索引,第几个存档,从1开始,存储后读取时也需要使用这个索引
hiddenTipboolean隐藏存档提示框,默认是false,显示提示框,存档时会有提示,true则不显示提示框
callbackFunction存档回调,存档成功后调用

存档相关流程

LM.save触发存档->调用Scene的onSave方法->onSave返回存档数据,引擎对场景进行截图(截图会去除isSaveScenetrue的scene)-> 提示存档成功->调用callback方法

自动存档

自动存档是指在项目中触发存档的操作,一般为关键节点自动触发存档,调用即存。重新进项目时默认使用自动存档内容。

参数详情

直接调用LM.autoSave()即可。

流程

于手动存档几乎一致。

LM.autoSave触发存档->调用Scene的onSave方法->onSave返回存档数据,引擎对场景进行截图(截图会去除isSaveScenetrue的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();
    }
}