保存和加载对象 javascript
saving and loading object javascript
我在弄清楚如何使用我使用的格式保存和加载我的游戏时遇到问题
所以我有这个
var upgradeButtonsData = [
{icon: 'dagger', name: 'Attack', level: 0, cost: 5, purchaseHandler: function(button, player) {
player.clickDmg += 1;
}},
{icon: 'swordIcon1', name: 'Auto-Attack', level: 0, cost: 25, purchaseHandler: function(button, player) {
player.dps += 5;
}}
];
并且我需要以与游戏其余部分相同的格式保存和加载它,例如我正在像这样为我的玩家保存金币
localStorage.setItem("playerGold",this.player.gold);
然后像这样加载
playerGold_save = localStorage.getItem("playerGold") || "0";
this.player.gold = parseInt(playerGold_save);
我想用上面的代码做一些类似的事情,但我不确定怎么做
另外,如果它与这里相关,我将如何使用上面的代码
onUpgradeButtonClick: function(button, pointer) {
// make this a function so that it updates after we buy
function getAdjustedCost() {
return Math.ceil(button.details.cost + (button.details.level * 1.46));
}
if (this.player.gold - getAdjustedCost() >= 0) {
this.player.gold -= getAdjustedCost();
this.playerGoldText.text = 'Gold: ' + this.player.gold;
button.details.level++;
button.text.text = button.details.name + ': ' + button.details.level;
button.costText.text = 'Cost: ' + getAdjustedCost();
button.details.purchaseHandler.call(this, button, this.player);
}
},
我也在使用 Phaser 作为框架
编辑:
显然人们对我问的问题感到困惑我不想要关于如何保存黄金的信息我已经完成了这只是我想如何保存的一个例子升级就像我需要保存“攻击”的等级和成本以及“自动攻击”的等级和成本以在下一次游戏中加载
抱歉造成任何混淆
编辑
我希望保存此代码
var upgradeButtonsData = [
{icon: 'dagger', name: 'Attack', level: 0, cost: 5, purchaseHandler: function(button, player) {
player.clickDmg += 1;
}},
{icon: 'swordIcon1', name: 'Auto-Attack', level: 0, cost: 25, purchaseHandler: function(button, player) {
player.dps += 5;
}}
];
编辑: 这是保存和加载升级程序数据的代码:
function saveUpgrader() {
var save = [];
for(var i = 0; i < upgradeButtonsData.length; i++)
save.push([upgradeButtonsData[i].level, upgradeButtonsData[i].cost]); // [0] = level ; [1] = cost
try { localStorage.setItem('upgrader_save', JSON.stringify(save)); }
catch(e) {
alert('Failed to save upgrader\'s data');
}
}
function loadUpgrader() {
if(!localStorage.getItem('upgrader_save'))
return ;
try {
var json = JSON.parse(localStorage.getItem('upgrader_save'));
for(var i = 0; i < json.length; i++) {
upgradeButtonsData[i].level = json[i][0];
upgradeButtonsData[i].cost = json[i][1];
}
}
catch(e) {
alert('Failed to load upgrader\'s data');
}
}
调用saveUpgrader
函数将每个项目的level
和cost
保存到升级器中,或loadUpgrader
加载它们(它将覆盖当前级别和成本)。
注意:如果要向升级器添加项目,请在现有元素之后添加,如下所示:
var upgradeButtonsData = [
{icon: 'dagger', name: 'Attack', level: 0, cost: 5, purchaseHandler: function(button, player) {
player.clickDmg += 1;
}},
{icon: 'swordIcon1', name: 'Auto-Attack', level: 0, cost: 25, purchaseHandler: function(button, player) {
player.dps += 5;
}},
// Add the new element here
{icon: '...', name: '...', level: 0, cost: 75, purchaseHandler: function(button, player) {
...
}}
];
如果你在其他元素之前添加新元素,保存将被破坏并做一些坏事。
希望对你有所帮助:)
我在弄清楚如何使用我使用的格式保存和加载我的游戏时遇到问题
所以我有这个
var upgradeButtonsData = [
{icon: 'dagger', name: 'Attack', level: 0, cost: 5, purchaseHandler: function(button, player) {
player.clickDmg += 1;
}},
{icon: 'swordIcon1', name: 'Auto-Attack', level: 0, cost: 25, purchaseHandler: function(button, player) {
player.dps += 5;
}}
];
并且我需要以与游戏其余部分相同的格式保存和加载它,例如我正在像这样为我的玩家保存金币
localStorage.setItem("playerGold",this.player.gold);
然后像这样加载
playerGold_save = localStorage.getItem("playerGold") || "0";
this.player.gold = parseInt(playerGold_save);
我想用上面的代码做一些类似的事情,但我不确定怎么做
另外,如果它与这里相关,我将如何使用上面的代码
onUpgradeButtonClick: function(button, pointer) {
// make this a function so that it updates after we buy
function getAdjustedCost() {
return Math.ceil(button.details.cost + (button.details.level * 1.46));
}
if (this.player.gold - getAdjustedCost() >= 0) {
this.player.gold -= getAdjustedCost();
this.playerGoldText.text = 'Gold: ' + this.player.gold;
button.details.level++;
button.text.text = button.details.name + ': ' + button.details.level;
button.costText.text = 'Cost: ' + getAdjustedCost();
button.details.purchaseHandler.call(this, button, this.player);
}
},
我也在使用 Phaser 作为框架
编辑:
显然人们对我问的问题感到困惑我不想要关于如何保存黄金的信息我已经完成了这只是我想如何保存的一个例子升级就像我需要保存“攻击”的等级和成本以及“自动攻击”的等级和成本以在下一次游戏中加载
抱歉造成任何混淆
编辑 我希望保存此代码
var upgradeButtonsData = [
{icon: 'dagger', name: 'Attack', level: 0, cost: 5, purchaseHandler: function(button, player) {
player.clickDmg += 1;
}},
{icon: 'swordIcon1', name: 'Auto-Attack', level: 0, cost: 25, purchaseHandler: function(button, player) {
player.dps += 5;
}}
];
编辑: 这是保存和加载升级程序数据的代码:
function saveUpgrader() {
var save = [];
for(var i = 0; i < upgradeButtonsData.length; i++)
save.push([upgradeButtonsData[i].level, upgradeButtonsData[i].cost]); // [0] = level ; [1] = cost
try { localStorage.setItem('upgrader_save', JSON.stringify(save)); }
catch(e) {
alert('Failed to save upgrader\'s data');
}
}
function loadUpgrader() {
if(!localStorage.getItem('upgrader_save'))
return ;
try {
var json = JSON.parse(localStorage.getItem('upgrader_save'));
for(var i = 0; i < json.length; i++) {
upgradeButtonsData[i].level = json[i][0];
upgradeButtonsData[i].cost = json[i][1];
}
}
catch(e) {
alert('Failed to load upgrader\'s data');
}
}
调用saveUpgrader
函数将每个项目的level
和cost
保存到升级器中,或loadUpgrader
加载它们(它将覆盖当前级别和成本)。
注意:如果要向升级器添加项目,请在现有元素之后添加,如下所示:
var upgradeButtonsData = [
{icon: 'dagger', name: 'Attack', level: 0, cost: 5, purchaseHandler: function(button, player) {
player.clickDmg += 1;
}},
{icon: 'swordIcon1', name: 'Auto-Attack', level: 0, cost: 25, purchaseHandler: function(button, player) {
player.dps += 5;
}},
// Add the new element here
{icon: '...', name: '...', level: 0, cost: 75, purchaseHandler: function(button, player) {
...
}}
];
如果你在其他元素之前添加新元素,保存将被破坏并做一些坏事。
希望对你有所帮助:)