we just need to utilize the function of gameNetwork.
It is not difficulty to implement them.
To consider Apple and Google at the same time,
let's check the codes first and see how them work:
local gameNetwork = require( "gameNetwork" ) local playerName local playerId local leaderboardsListId= { ["HighestScore"]= { ["Description"] = "Highest Score", ["Identifier"] = "com.gmail.mycom.demo.Leaderboards.HighestScore" } } local achievementsListId = { ["FinishLevel1"]= { ["Description"] = "Finish Level 1", ["Identifier"] = "com.gmail.mycom.demo.Achievements.FinishLevel1" }, ["FinishLevel2"]= { ["Description"] = "Finish Level 2", ["Identifier"] = "com.gmail.mycom.demo.Achievements.FinishLevel2" } } if(isAndroid) then leaderboardsListId= { ["HighestScore"]= { ["Description"] = "Highest Score", ["Identifier"] = "Cgkxxxxxxxx" } } achievementsListId = { ["FinishLevel1"]= { ["Description"] = "Finish Level 1", ["Identifier"] = "Cgkxxxxxxx" }, ["FinishLevel2"]= { ["Description"] = "Finish Level 2", ["Identifier"] = "Cgkxxxxxxxx" } } end function showLeaderboards( event ) print("showLeaderboards()") if (playerId ~= nil) then if ( isAndroid ) then gameNetwork.show( "leaderboards" ) else gameNetwork.show( "leaderboards", { leaderboard = {timeScope="AllTime"} } ) end else gameNetworkSetup() end return true end local function postScoreSubmit( event ) --whatever code you need following a score submission... return true end local function updateLeaderBoards(type, myScore) if (playerId == nil) then return end gameNetwork.request( "setHighScore", { localPlayerScore = { category=leaderboardsListId[type]["Identifier"], value=tonumber(myScore) }, listener = postScoreSubmit } ) print("gameNetwork.request( setHighScore) finished") end function showAchievements( event ) print("showAchievements()") if (playerId ~= nil) then gameNetwork.show( "achievements" ) else gameNetworkSetup() end return end local function achievementRequestCallback( event ) return true end local function updateAchievement(type) if (playerId == nil) then return end gameNetwork.request( "unlockAchievement", { achievement = { identifier=achievementsListId[type]["Identifier"], percentComplete=100, showsCompletionBanner=true }, listener = achievementRequestCallback } ) end local function loadScoresCallback( event ) if(event.data == nil) then print("event.data is nil") return end for i=1,25 do if(event.data[i] == nil) then break end print("event.data[",i,"].playerID:",event.data[i].playerID) print("event.data[",i,"].category:",event.data[i].category) if(event.data[i].playerID == playerId) then print("matched playID...........") break end end end local function loadLocalPlayerCallback( event ) if(event.data == nil) then print("event.data is nil") return end playerId = event.data.playerID playerName = event.data.alias print("loadLocalPlayerCallback(),playerName:",playerName,",playerId:",playerId) if(playerId == nil) then return end myGameSettings.gameCerterHasEverLoggedIn = true saveData() gameNetwork.request( "loadScores", { leaderboard = { category = leaderboardsListId["HighestScore"]["Identifier"], playerScope = "Global", -- Global, FriendsOnly timeScope = "AllTime", -- AllTime, Week, Today --range = {1,5}, playerCentered = true, }, listener = loadScoresCallback }) end local function loadAchievementCallback( event ) if(event.data == nil) then print("event.data is nil") return end for i=1,#event.data do if(event.data[i] ~= nil) then print("event.data[",i,"].identifier:",event.data[i].identifier) print("event.data[",i,"].title:",event.data[i].title) print("event.data[",i,"].isCompleted:",event.data[i].isCompleted) end end end local function gameNetworkLoginCallback( event ) if(isAndroid==false) then if(event.data) then print("User has logged into iOS Game Center") else print("User has NOT logged into iOS Game Center") return end end gameNetwork.request( "loadLocalPlayer", { listener=loadLocalPlayerCallback } ) gameNetwork.request( "loadAchievements", { listener=loadAchievementCallback } ) return true end local function gpgsInitCallback( event ) if(event.data) then print("User has logged into Google App Play Center") gameNetwork.request( "login", { userInitiated=true, listener=gameNetworkLoginCallback } ) else print("User has NOT logged into Google App Play Center") end end function gameNetworkSetup() if ( isAndroid ) then myGameSettings.gameCerterHasEverLoggedIn = false gameNetwork.init( "google", gpgsInitCallback ) else gameNetwork.init( "gamecenter", gameNetworkLoginCallback ) end end }Init
In general, we can call gameNetworkSetup() in main.lua,
For Android, we need to check if we have logged in successfully in gpgsInitCallback().
For iOS, we need to check if we have logged in successfully in gameNetworkLoginCallback().
The code gameNetwork.request( "loadLocalPlayer", { listener=loadLocalPlayerCallback } ) is to confirm the user who logs in.
You can go without it.
The code gameNetwork.request( "loadAchievements", { listener=loadAchievementCallback } ) is to recover the users's records.
For example, users may have ever installed this APP, remove this APP, and re-install it again.
If you think that you don't need to recover the records for them, you can go with it.
Show leaderboard
To show the leaderboard, we just need to call function showLeaderboards().
In general, we do it when user press some button
Show achievement
To show the leaderboard, we just need to call function showAchievements().
In general, we do it when user press some button.
Update leaderboard
To update leaderboard, we just need to call function updateLeaderBoards().
In general, wwe do it when user finish the game.
Update achievements
To update leaderboard, we just need to call function updateAchievement().
In general, wwe do it when user finish some round.
Below are what differ between Apple Game Center and Android Google Play Game Service:
Apple Game Center
The data in leaderboardsListId{} and achievementsListId{}:
e.g. "com.gmail.mycom.demo.Leaderboards.HighestScore".
They are user defined, as long as they are not duplicated.
Google Play Game Service
e.g. "com.gmail.mycom.demo.Leaderboards.HighestScore".
They are user defined, as long as they are not duplicated.
Google Play Game Service
The data in leaderboardsListId{} and achievementsListId{}:
e.g. "Cgkxxxxxxxx".
They are defined by play store publish when you finished the setting in game center.
For Google Play Game Service, we also need to add the googlePlayGamesAppId in build.settings:
e.g. "Cgkxxxxxxxx".
They are defined by play store publish when you finished the setting in game center.
For Google Play Game Service, we also need to add the googlePlayGamesAppId in build.settings:
android = { usesPermissions = { "android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "com.android.vending.BILLING", }, googlePlayGamesAppId = "123456789012" },usesPermissions are not concerned for game service,
googlePlayGamesAppId is what you get when you link the APP in play store publish game center.
沒有留言:
張貼留言