// Learn cc.Class:
// - https://docs.cocos.com/creator/manual/en/scripting/class.html
// Learn Attribute:
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
var curMod = cc.Class({
extends: cc.Component,
properties: {
// foo: {
// // ATTRIBUTES:
// default: null, // The default value will be used only when the component attaching
// // to a node for the first time
// type: cc.SpriteFrame, // optional, default is typeof default
// serializable: true, // optional, default is true
// },
// bar: {
// get () {
// return this._bar;
// },
// set (value) {
// this._bar = value;
// }
// },
version: "103",
},
statics: {
_instance: null,
Instance() {
return curMod._instance;
},
},
// LIFE-CYCLE CALLBACKS:
onLoad() {
curMod._instance = this;
cc.game.addPersistRootNode(this.node);
var Bag = {};
var item1 = {
id: 1001,
count: 1
}
var item2 = {
id: 4001,
count: 1
}
var date = new Date().getTime();
Bag[1001] = item1;
Bag[4001] = item2;
this.userData = {
PLname: "我",
PLpicUrl: "",
gameTime: 0,
moneyCount: 0,
MaxDeliveries: 0,
MaxDistance: 0,
bag: Bag,
roleId: 1001,
itemId: -1,
vehicleId: 4001,
lastLoginDay: date,
loginDay: 1,
dailyTask: {},
CoinGetCountShare: 0,//分享
CoinGetCountVideo: 0,//视频
};
this.readMsg();
},
SetMaxScore(destance, count) {
if (destance > this.userData.MaxDistance ||
(destance === this.userData.MaxDistance && count > this.userData.MaxDeliveries)) {
this.userData.MaxDeliveries = count;
this.userData.MaxDistance = destance;
this.save();
}
},
setDailyTask(ID, count, isGet) {
if (this.userData.dailyTask[ID] && !isGet) {
if (parseInt(ID / 1000)) {
this.userData.dailyTask[ID].count = count;
}
else {
this.userData.dailyTask[ID].count += count;
}
}
else if (this.userData.dailyTask[ID] && isGet) {
this.userData.dailyTask[ID].isGet = true;
}
else {
var item = {
id: ID,
count: count,
isGet: false,
}
this.userData.dailyTask[ID] = item;
}
//this.save();
},
checkDailyState(ID) {
var id = parseInt(ID / 1000);
var DailyTasks = require('TableUtil').GetTableByName('DailyTask');//XML为json文件名
if (this.userData.dailyTask[id] && !this.userData.dailyTask[id].isGet) {
if (id === 1) {
if (this.userData.dailyTask[id].count = DailyTasks[ID].taskCount) {
return true;
}
}
else {
if (this.userData.dailyTask[id].count >= DailyTasks[ID].taskCount) {
return true;
}
}
}
return false;
},
getDailyState(ID) {
if (this.userData.dailyTask[ID] && this.userData.dailyTask[ID].isGet) {
return true;
}
return false;
},
start() {
require('TableUtil').initAllTable();//加载所有表
},
getData() {
return this.userData;
},
addBag(ID) {
if (this.userData.bag[ID]) {
this.userData.bag[ID].count += 1;
}
else {
var item = {
id: ID,
count: 1
}
this.userData.bag[ID] = item;
}
if (parseInt(ID / 1000) === 1) {
this.userData.roleId = ID;
}
else if (parseInt(ID / 1000) === 2 || parseInt(ID / 1000) === 3) {
this.userData.itemId = ID;
}
else if (parseInt(ID / 1000) === 4) {
this.userData.vehicleId = ID;
}
//this.save();
},
removeBag(ID) {
if (this.userData.bag[ID]) {
this.userData.bag[ID].count -= 1;
if (this.userData.bag[ID].count === 0) {
delete this.userData.bag[ID];
this.userData.itemId = -1;
}
}
},
addMoney(count) {
this.userData.moneyCount += count;
//this.save();
},
save: function () {
cc.sys.localStorage.setItem('SFJetpack_PlayerData', JSON.stringify(this.userData));//存数据
console.log("保存玩家信息", this.userData)
},
save2: function () {
cc.sys.localStorage.setItem('SFJetpack_V', this.version);//存数据
console.log("保存玩家信息SFJetpack_V", this.version)
},
readMsg: function () {
console.log("数据加载");
//window.localStorage.removeItem('SFJetpack_PlayerData');
if (cc.sys.localStorage.getItem('SFJetpack_V')) {
var str = cc.sys.localStorage.getItem('SFJetpack_V');//读取数据
if (this.version === str) {
}
else {
}
} else {
this.save2();
}
if (cc.sys.localStorage.getItem('SFJetpack_PlayerData')) {
var str = cc.sys.localStorage.getItem('SFJetpack_PlayerData');//读取数据
//console.log("读取数据", str)
//console.log(str)
str = str.replace(/\ +/g, "");//去掉空格
str = str.replace(/[\r\n]/g, "");//去掉回车换行
this.userData = JSON.parse(str);
if (!this.userData.CoinGetCountShare) {
this.userData.CoinGetCountShare = 0;
this.userData.CoinGetCountVideo = 0;
}
if (this.CheckLoginDate(this.userData.lastLoginDay)) {
this.userData.loginDay++;
this.userData.dailyTask = {};
this.userData.CoinGetCountShare = 0;
this.userData.CoinGetCountVideo = 0;
console.log("第二天重置数据");
}
this.userData.lastLoginDay = new Date().getTime();
this.save();
console.log("读取信息", this.userData)
} else {
this.save();
}
// cc.log(this.userData.lastLoginDay, new Date())
console.log("玩家信息:", this.userData)
//this.addMoney(50000);
},
CheckLoginDate(lastLoginDay) {
var lastLoginDay = new Date(lastLoginDay);
var now = new Date();
if (now.getFullYear() !== lastLoginDay.getFullYear() ||
now.getMonth() !== lastLoginDay.getMonth() ||
now.getDate() !== lastLoginDay.getDate()) {
return true;
}
cc.log("第二天", lastLoginDay.toDateString(), now.toDateString())
return false;
},
// update (dt) {},
});
android 模拟器和实机 用cc.sys.localStorage 会导致掉帧,就算不频繁调用也会导致掉帧的,官方也没什么优化方案,属于遗留问题。
目前来说解决办法就是用JSB写文件来储存:
jsb.fileUtils.writeStringToFile(string, filename)
jsb.fileUtils.getStringFromFile(filename)
本文详细介绍使用Cocos Creator进行游戏数据管理的方法,包括玩家数据的保存与读取、游戏物品背包管理、任务状态检查与更新等核心功能实现。探讨了如何通过本地存储管理游戏进度,并解决了模拟器和实际设备上可能遇到的性能问题。

764

被折叠的 条评论
为什么被折叠?



