如何使用gameNetwork.request("loadScores")获取自己的最高分数?

有人使用 Google Play 提供的 gameNetwork 吗?我在使用它时遇到了一点问题,我正在尝试获取个人最高分,但它没有正常工作。

这是我使用的代码

            function loadScoreCallback(event)
                oldScore = event.data[5].formattedValue
            end

            gameNetwork.request( "loadScores",
            {
                leaderboard =
                {
                    category = "thecategory id",
                    playerScope = "Global",   -- Global, FriendsOnly
                    timeScope = "AllTime",    -- AllTime, Week, Today
                    range = {1,5},
                    playerCentered = true,
                },
                listener = loadScoreCallback
            })

我还尝试了这样的代码

                function loadScoreCallback(event)
                oldScore = event.data
            end

            gameNetwork.request ( "loadScores",
            {
                leaderboard =
                {
                    playerID = playerName,
                    category = "CgkIptXi1qgCEAIQAw",
                    playerScope = "Global",   -- Global, FriendsOnly
                    timeScope = "AllTime",    -- AllTime, Week, Today
                    playerCentered = true,
                },
                listener = loadScoreCallback
            })

也不起作用 :/

点赞
用户3284364
用户3284364

好吧,我想到了更好的方案,因为并不是每个人都时刻在线,所以我自己开发了一套保存系统,并从中获取了高分。但我仍然不知道为什么它不起作用,恩至少我通过这个解决了这个问题。

2014-02-10 19:54:35
用户3038364
用户3038364

我一开始有些困惑,但是我找到了适合我的解决方案。以下是当用户提交分数时调用的监听器:

   local function onGameNetworkRequestResult( event )
       if event.type == "setHighScore" then
        local function tempScoresFct(event)
            if event.data then
              local playerRank = event.data[1].rank
              local currentValue = event.data[1].value
              if lb.tempScore <= event.data[1].value then
                native.showAlert("分数已提交", "您的分数低于或等于排行榜中的当前分数("..currentValue.."),未发生任何变化。您的全球所有时间排名为:\n" .. playerRank .. "\n点击“显示排行榜”按钮,查看您在朋友和其他时间尺度中的表现。", {"好"})
              else
                native.showAlert("分数已提交", "您的分数已成功上传到排行榜中。您的全球所有时间排名为:\n" .. playerRank .. "\n点击“显示排行榜”按钮,查看您在朋友和其他时间尺度中的表现。", {"好"})
              end
            end
          end

          gameNetwork.request( "loadScores",
          {
            leaderboard =
            {
              category = event.data.category,
              playerScope = "Global",   -- Global, FriendsOnly
              timeScope = "AllTime",    -- AllTime, Week, Today
              range = {1,1}, --Just get one player
              playerCentered = true, -- and this player is the player that is logged in
            },
            listener = tempScoresFct
          })
 end
end

以下是提交分数的函数:

function lb.submitScoreFct(event)
  if event.phase == "ended" then

    if gameNetwork.request("isConnected") then
      --显示排行榜
      print("提交分数")

      local myCategory
      local categoryName
      if event.target.category == 1 then
        myCategory = "ategoryID" --palo alto
        categoryName = "Palo Alto"
      elseif event.target.category == 2 then
        myCategory = "ategoryID" --groningen
        categoryName = "Groningen"
      elseif event.target.category == 3 then
        myCategory = "ategoryID" --sp2
        categoryName = "SP2"
      end
      --local score = mRand(100,1000)
      local score = event.target.score
      lb.tempScore = score -- 我使用此选项来验证上传的分数是否高于或低于已有的值
      print("将 " .. score .. " 添加到 " .. categoryName)

      gameNetwork.request( "setHighScore",
      {
        localPlayerScore = { category=myCategory, value=tonumber(score) },
        listener = lb.onGameNetworkRequestResult
      })
    end
  else
    print("用户需要登录")
    -- 如果出现问题,则尝试登录用户,例如显示登录屏幕。
    gameNetwork.request("login",
    {
      listener = loginListener,
      userInitiated = true -- 如果为 false,则此过程是无声的,即如果用户未登录,则不会弹出登录。
    })
  end
  return true
end

还有一件事情我发现,这些监听器函数是脆弱的。如果出现一个错误,它们就会退出,有时不会给出任何错误提示。例如,如果您尝试打印(event.data.rank) (而不是打印(event.data[1].rank)),就不会出现任何错误,但该函数在此处结束,而函数的其余部分则不执行...

2014-03-01 20:43:33