0

我想为我的成就类中的一个值实现 localStorage。所以基本上这个类所做的就是从后端数据库中获取玩家数据,如果玩家清除某些任务,成就就会被解锁。目前我只有 1 项成就,定义如下

成就:{ 1:{name:'First_Achievement',status:1} },

状态字段就像我的成就的标志。如果状态为 1,则成就仍被锁定,如果状态为 0,则成就被解锁。

这是我的成就解锁时的骨架代码。我的游戏中每 10 秒检查一次此代码块,以查看是否清除了某个任务以解锁成就

      checkAchievements:function(){ 
      this.probsSolved = this.getTeamProbSolved(); 
      if( this.Achievements[1].status == 1 && this.probsSolved.length >=3)  
          this.triggerAchievement(1); // spawns achievement 1 on screen                   
          this.Achievements[1].status = 0; 
      },

所以当我运行游戏时这很好用。“this.Achievements[1].status”设置为 0,直到我下次再次开始游戏。它将“this.Achievements[1].status”设置回 1,并且 if 循环再次运行,因为状态设置回 1,这是我不想要的,因为很明显我希望我的成就只产生或显示一次,并且不是每次我运行游戏。

那么如何在这里实现 localStorage 呢?我想我需要将我的“Achievements.status”字段存储在 localStorage 中,以便 if 循环只运行一次,而不是每次都运行。或者还有其他方法可以实现吗?

我尝试了以下

localStorage.setItem(this.Achievements[1].status,0);

但它不起作用

任何帮助,将不胜感激!谢谢!

4

1 回答 1

1

首先,我建议阅读 MDN 上有关 localStorage 的文档 - https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage。接下来,让我们看看你的电话:

localStorage.setItem(this.Achievements[1].status,0);

这表示:我希望您存储一个值 0,并通过作为 this.achievements[1].status 值的键检索它。

这对你来说似乎是布尔值。所以你基本上做了:

localStorage.setItem(true, 0)

localStorage API 需要一个字符串作为键名,因此它将获得字符串值 true,即 true。所以它可能你有用,但你使用的密钥可能不是你想要的。您需要考虑一个对您有意义的键名方案。

于 2014-03-27T19:57:07.657 回答