我想在我的Achievements类中为我的一个值实现localStorage。所以这个类的基本功能是从后端数据库中获取玩家数据,如果玩家清除某些任务,则成就会被解锁。现在我只有1个成就定义如下
成就:{1:{姓名:' First_Achievement',状态: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);
但它不起作用
任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
首先,我建议您阅读MDN上localStorage的文档 - https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage。接下来,让我们来看看你的电话:
localStorage.setItem(this.Achievements[1].status,0);
这说:我希望你存储一个值0,并通过this.achieve [1] .status的值来检索它。
似乎是你的布尔值。所以你基本上做了:
localStorage.setItem(true, 0)
localStorage API需要一个字符串作为键名,因此它将获得字符串值true,即true。所以它可能 为你工作,但你使用的键可能不是你想要的。您需要考虑一个对您有意义的关键名称方案。