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 としましょう) も評価できるようにしたかったので、評価と評価カウントという新しい 2 つのフィールドを作成することで簡単にできるので、誰かが投票するたびに、評価はカウントされ、++ 評価はカウントされます。

問題は、プレーヤーが特定のレベルを複数回評価するのを防ぐ方法ですか? ありがとう。

4

1 に答える 1

1

私は私のプロジェクトのためにこれについて考えました。最終的に、2 つのデータ ポイントが必要になります。

  1. オブジェクトのランクごとにカウントを追跡する必要があります(あなたの場合はレベル)
  2. UserLevelRating、少なくともユーザーへの参照、ターゲット (レベル) への参照、および与えられた評価 (人々に評価を変更させる場合) を追跡する必要があります。

実装方法に応じて、何かを 2 回評価するのを防ぐため、または人々が何かに与えた評価を変更できるようにするために、現在のユーザーとレベルに対してクエリを実行します。レコードが返された場合、彼らはすでに投票しているので、再度投票できないようにします。

投票の変更やターゲット (レベル) のカウントの更新など、他のことを処理するために、安全前または保存後のロジックを使用してクラウド コードを追加できます。

投票を変更しない単純な単一投票システムに使用するロジックのサンプルを次に示します。

  • UserLevelRating レコードの存在をテストし、存在する場合は投票を防止します
  • 投票を保存します。ユーザー=現在のユーザー、レベル=選択したレベル、評価=与えられた星を含めます
  • クラウド コードは、UserLevelRating の保存後に Level プロパティを調べ、レベルをロードし、評価のプロパティでインクリメントを呼び出します (たとえば、Rating=3 の場合、increment("Stars3") が呼び出されます)。

Level オブジェクトをロードするたびに、各評価のカウントがあり、平均を生成できます。

于 2013-09-08T23:21:27.393 に答える