【发布时间】:2016-04-11 14:05:16
【问题描述】:
我正在使用 HTML 和 Javascript 创建一个 Facebook 游戏,并且我刚刚完成了一个排行榜,其中列出了每个玩家的姓名和排名。该表填充了从 Facebook 的游戏得分 API 返回的数据。
这是完美的工作,但我也想奖励玩家提高他们在表中的排名。
我打算这样做:
- 当游戏加载时,我运行了一个名为
updateTable();的函数,这个 用玩家的分数和排名填充排行榜 从对 Facebook 数据库的 API 调用接收。 - 当玩家开始玩游戏时,我将他们的排名副本存储在一个单独的隐藏 div 中。
- 游戏结束时,如果玩家达到了新的高分,那么
它被输入到数据库中。发生这种情况后,我运行
再次
updateTable();更新排行榜。 - 然后我运行一个名为
compareRanks();的函数,它比较 玩家的新排名与我存储在隐藏 div 中的排名。
如果新的排名低于存储的排名,那么他们在排行榜上的排名上升了,我每提升一个位置奖励他们 100 个硬币。
例如:
玩家 A 开始游戏并排名第 5(因此“5”存储在隐藏的 div 中)。 当玩家 A 完成游戏时,排行榜会更新,玩家 A 现在排名第二(所以玩家已经跳了 3 位)。
要计算出奖励应该是多少,我想从第二个变量中减去第一个变量 (5-2 = 3),玩家 A 超过了其他 3 个玩家,所以他们的奖励是 3 x 100 金币。
我遇到的问题是,当我运行compareRanks(); 时,即使我知道玩家已经提高了他们的排名,新排名仍然显示为与存储排名相同的数字。
我很确定这是因为在 updateTable(); 与数据库完全交互之前抢占了新排名。我已经通过分离功能进行了测试,通过单击按钮使compareRanks(); 运行,当我这样做时,我完成了一个游戏,提高了我的排名,在updateTable(); 运行后等待了几秒钟,然后单击了按钮, 并且两个等级显示不同,这是正确的。所以我认为compareRanks(); 只需要等待updateTable(); 在它运行之前完全完成。
这是我的功能的布局方式:
updateTable(){
//code here interacts with the database/makes a call using Facebook's API,
//and populates the leaderboard table with the returned data
}
在新游戏开始时,玩家的当前排名存储在隐藏的 div 中。
当游戏结束时updateTable();再次运行,紧接着compareRanks();:
compareRanks(){
//code here grabs the stored rank from the hidden div
//code here grabs the newly updated rank and compares the two.
}
我已经阅读了有关使用回调的答案,但我无法让它们工作。我试过做这样的事情:
updateTable(){
{
//code here interacts with the database/makes a call using Facebook's API,
//and populates the leaderboard table with the returned data
}
compareRanks();
};
但是当compareRanks(); 运行时,新排名仍然显示与旧排名相同。 updateTable(); 在运行时会正确更改排行榜上的排名,所以我认为 compareRanks(); 只是在 updateTable(); 完全完成之前运行。
非常感谢您在解决此问题方面的任何帮助,提前感谢您!
【问题讨论】:
-
如果您正在寻找在前面完成后如何调用函数,请查看:stackoverflow.com/questions/5000415/…
标签: javascript html facebook facebook-graph-api facebook-javascript-sdk