Cocos creator实现《战机长空》关卡本地存储功能

发布于:2024-05-14 ⋅ 阅读:(168) ⋅ 点赞:(0)

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator在开放小游戏过程中,经常会出现设置关卡,这里记录一下关卡数据本地存储功能。

一、关卡设置数据

假如我们有关卡数据如下,

let settings = [
{
level: 1, // 第1关
score: 0, // 最高得分
duration: 240, // 倒计时时长,单位为秒s
bossBlood: 100, // BOSS血量
levelState: ‘UNLOCKED’, // 关卡状态
},
{
level: 2, // 第1关
score: 0, // 最高得分
duration: 240, // 倒计时时长,单位为秒s
bossBlood: 200, // BOSS血量
levelState: ‘LOCKED’, // 关卡状态
},
}

关卡数据中定义了level、score、duration、bossBlood、levelState等数据,当进入游戏时候,我们检测是否有关卡数据,没有的话,将settings数据进行存储。

onLoad() {

        let localSettings = JSON.parse(cc.sys.localStorage.getItem('settings'));
        if (!localSettings) {
            cc.sys.localStorage.setItem('settings', JSON.stringify(settings));
        }
}

二、选择关卡

当开始游戏后,我们需要选择关卡,选择关卡从localStorage取出当前的level信息

selectLevel() {
        let currentLevelInfo = JSON.parse(cc.sys.localStorage.getItem('currentLevelInfo'));
        if (!currentLevelInfo) {
            if (!cc.sys.localStorage.getItem('settings')) {
                // 将所有关卡信息存入本地(针对首次游戏)
                cc.sys.localStorage.setItem('settings', JSON.stringify(settings));
                let levelSetting = settings[0];
                // 将目标关卡信息存入本地,在Game.js中取出
                cc.sys.localStorage.setItem('currentLevelInfo', JSON.stringify(levelSetting));
            } else {
                // 如果玩家已经玩过,则从本地存储中获取关卡配置信息
                let newSettings = JSON.parse(cc.sys.localStorage.getItem('settings'));
                // 将目标关卡信息存入本地,在Game.js中取出
                let levelSetting = newSettings[0];
                cc.sys.localStorage.setItem('currentLevelInfo', JSON.stringify(levelSetting));
            }
        }
    }

进入游戏界面,我们设置游戏的总时长,及显示当前的关卡level

// 首先获取当前关卡信息
        this.currentLevelInfo = JSON.parse(cc.sys.localStorage.getItem('currentLevelInfo'));
        this.levelLabel.string = "第" + this.currentLevelInfo['level'] + "关";

        // 默认总时长
        this.countDuration = this.currentLevelInfo['duration'];
        this.interval = 1;

游戏成功后更新本地存储的最高分

if (gameResultData.isWin) {
                if (gameResultData.gotStarScore > localSettings[this.currentLevelInfo['level'] - 1]['score']) {
                    localSettings[this.currentLevelInfo['level'] - 1]['score'] = gameResultData.gotStarScore;
                }
                cc.sys.localStorage.setItem('settings', JSON.stringify(localSettings));    
            }

效果图如下
在这里插入图片描述

三、小结

Cocos creator实现《战机长空》关卡本地存储功能。描述可能不是特别准确,请见谅。

学习记录,每天不停进步。

战机长空
在这里插入图片描述

网站公告

今日签到

点亮在社区的每一天
去签到