0

我正在使用 parse.com 云存储,为我的游戏的内置关卡编辑器实现关卡共享/下载和评级,因此允许玩家构建和测试他们自己创建的关卡,然后他们可以与不同的玩家共享它,即这是我将其上传到 parse.com 云存储的方式:

        ParseObject testObject = new ParseObject("Levels");
        testObject.put("file", new ParseFile(name + ".lvl", levelString.getBytes()));
        testObject.put("author", authorName);
        testObject.put("email", authorEmail);
        testObject.saveInBackground();

它工作正常,但我想让玩家也对下载的关卡进行评分(比如说 1-5 星)这可能很简单,通过创建新的两个字段,称为评分和评分计数,所以每次有人投票时,我都会将其添加到收视率计数和 ++ 收视率计数。

问题是,如何防止玩家多次评价特定级别?谢谢。

4

1 回答 1

1

我已经为我的一个项目考虑过这个问题。最后,您将需要两个数据点。

  1. 您需要跟踪对象上每个等级的计数(在您的情况下为等级)
  2. 您需要跟踪 UserLevelRating,至少是对用户的引用、对目标(级别)的引用以及给定的评级(如果您让人们更改评级)

根据您想要实现它的方式,为了防止对某物进行两次评分,或者为了允许人们更改他们给某物的评分,您可以查询当前用户和级别。如果返回记录,他们已经投票,因此请阻止他们再次投票。

您可以使用 before-safe 或 after-save 逻辑添加一些云代码来处理其他事情,例如更改投票和更新目标 (Level) 上的计数。

这是我将用于一个简单的单票系统而不更改投票的逻辑示例:

  • 测试 UserLevelRating 记录是否存在,如果存在则阻止投票
  • 保存投票,包括用户=当前用户,级别=选定级别,评级=给定的星数
  • 云代码,在保存 UserLevelRating 后,查看 Level 属性,加载级别,调用属性的 increment 以获取评级(例如,如果 Rating=3,increment("Stars3") 将被调用)

任何时候你加载一个 Level 对象,你都会有每个评级的计数,并且可以产生平均值。

于 2013-09-08T23:21:27.393 回答