2016-07-03 17 views
0

ブラウザを更新するときにlocalStorageがクリック変数を記録する方法が見つからないようです。localstorageでオブジェクトを保存する

私はJSON.stringifyとJSON.parseを試してみましたが、parseIntについて知っていました。これはより良い選択肢(私は単に数値を格納しようとしています)です。

私はプログラミングに新しい、私がチェックしたすべての例は純粋なjavascriptであり、あまりにも複雑すぎたり、説明が不十分であり、時代遅れです。あなたが私を助けてくれることを願っています。私はこの問題を1週間以上解決しようとしてきました。

さらに詳しい情報:私はMAMPでPhaser 2.5.0を使用しています。 Google Chrome 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() { 
 

 
    \t clicks++; 
 
}

+0

したがって、同じクリック数ユーザーがページをリロードしたとき。クリック変数はどのようにゼロに設定されますか?ユーザーがそれを行う方法はありますか? – trincot

答えて

1

、それを持つ変数:

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

ませんあなたはこのかかわらを望んでいたかどうかわから - :クリックするが、これは単なるsuggestion.youでこのようにそれを実装することができます名。すでに数値であるので、parseIntclicksと呼んでも意味がありません。さらに、localStorageはすべてをストリングとして格納します。何をするにしても、ストリングとして格納されることになります。

保管:

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

は読書:

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

今、あなたは正しい場所に上記のステートメントを配置する必要があります。最初に値を記憶装置に書き込んだ後に再度読み出すことは意味がありません。明らかに値は以前と同じになります。の前には、の前に値が取られません。あなたにも代わりにあなたがcreate機能で、一度値を読み、そしてあなたがそれを変更するたびに値を書き込み、すなわちupScoreTextにしたいと思うでしょう...その後

をこれら2つの行をスキップ可能性があります

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にリセットする方法を追加する必要があります。

+0

トリコットありがとう、それは働いた。私がJSON.stringifyとJSON.parseをlocalStorageで使用する必要があると述べた人もいます。後で、誰かがparseIntの使用を推奨しました。グローバル変数clicks = 0を削除することができます。今。私が調べたすべての例から、+ localStorageメソッドを持っていた人はいませんでした。 – QuimB

+0

実際には、 'var clicks = 0'を削除することができます。 'JSON.stringify'と' JSON.parse'は、オブジェクトや配列をlocalStorageに/からロードしたいときに便利ですが、変数が(数字の場合と同様に)文字列にうまく変換すれば、必要ありません。 – trincot

+0

私は見る...ちょっとだけ素早い質問:私の次の課題は、複数の変数を格納する方法を学ぶことです。それらの値を格納する最良の方法は何でしょうか?配列で?クイックヘルプにもう一度感謝します。 – QuimB

0

ご使用のparseInt間違っすなわち代わりに

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

あなたは

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

を使用する必要がありますし、私はypuをクリックする変数が存在するかどうか最初にチェックすべきだと思いますlocalStorageを作成し、変数を割り当てますあなたはリテラルclicksを保存しないでください/

関連する問題