使用localStorage存储对象

时间:2016-07-03 13:03:30

标签: javascript local-storage phaser-framework

在刷新浏览器时,我似乎找不到localStorage记录点击变量的方法。

我尝试过使用JSON.stringify和JSON.parse,但后来发现了parseInt,这似乎是一个更好的选择(我只是想存储一个数字)。

我对编程很陌生,我检查的所有例子都是纯粹的javascript,太复杂/解释不当或过时。希望你能帮助我。我一直试图解决这个问题一个多星期。

更多信息:我正在使用Phaser 2.5.0和MAMP。谷歌浏览器v49.0.2623.112(64位),OS X 10.8.5。

var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update });

var scoreText;
var clicks = 0;



function preload() {

    game.load.image('clickBox', 'assets/ClickMe.png');
    game.stage.backgroundColor = '#182d3b';
    game.stage.disableVisibilityChange = true; 
}


function create() {

    localStorage.setItem('clicks', parseInt('clicks'));
    localStorage.getItem('clicks');



    button = game.add.button(game.width/2, game.height/2, 'clickBox', upScoreText);


    scoreText = game.add.text(30, 30, "CLICKS: " + clicks, {font: "20px Arial", fill: "#ffffff", align: "left"});

    button.scale.x = 0.5;
    button.scale.y = 0.5;
    button.anchor.setTo(0.5);
    button.inputEnabled = true;
}


function update () {

            scoreText.setText("CLICKS: " + clicks);        
}


function upScoreText () {

    	clicks++;
}

2 个答案:

答案 0 :(得分:1)

您不应存储文字clicks,而应存储具有该名称的变量。在parseInt上调用clicks没有任何意义,因为它已经是一个数字。此外,localStorage将所有内容存储为字符串,因此无论如何,它最终都会以字符串形式存储。

储存:

localStorage.setItem('clicks', clicks); // is always stored as string

读:

clicks = +localStorage.getItem('clicks'); // `+` makes it a number

现在你必须将上述陈述放在正确的位置。首先将值写入存储然后再将其读出是没有意义的:显然,该值将与之前相同,并且在之前存储的内容中没有任何优势。你不妨跳过这两行...

相反,您需要在create函数中读取一次值,并在更改值时写入值,即在upScoreText中:

function create() {
    // Load. If not exists in localStorage, use 0. 
    // If it does, cast to number with `+`:
    clicks = +localStorage.getItem('clicks') || 0;
    // etc...
}

function upScoreText () {
    clicks++;
    // Save:
    localStorage.setItem('clicks', clicks);
}

现在,您有一个不断增加的点击变量,可以在页面重新加载后继续存在,但您可能需要添加一种方法将值重置为0.

答案 1 :(得分:0)

您使用parseInt错误,而不是

localStorage.setItem('clicks', parseInt('clicks'));

你应该使用

localStorage.setItem('clicks', parseInt(clicks));/*removed the quotes for the clicks*/

我认为ypu应首先检查localStorage中是否存在clicks变量,然后分配变量点击,但这只是一个建议。你可以这样实现: -

var clicks=localStorage.getItem("clicks")||0;

不确定你是否想要这个:/