由于Game Center功能仅是现有的gameNetwork API的扩展,没有必要去重做每个可以发送到Game Center的请求。你可以查看更新文档中的gameNetwork的init(), request()和show()接口。
相反,我会让你快速概览需要在“苹果方面”(iTunes Connect)做的东西、Corona的“设置”信息以及确保一切应用程序工作正常的特殊的考虑。
iTunes Connect
苹果方面你需要采取的步骤是非常简单的,所以我不会在这方面太深入。总之,你要启用应用程序的Game Center功能,你需要创建Leaderboards(高分板)和Achievements,还有得记住Leaderboards和Achievements中你分配的独立ID。
- 点击 ‘Manage Your Applications’ 链接
- 点击应用图标
- 在右边, 点击 ‘Manage Game Center’ 按钮
- 点击‘Enable’ 按钮
- 点击在 Leaderboard 和 Achievements 栏下的‘Edit’
- 添加 Leaderboards 和 Achievements
- 记下 ‘Leaderboard ID’ 和‘Achievement ID’
当然,如果你不想在你的游戏中有Achievements(或Leaderboard),你可以跳过这些部分。建议你添加一下,不然实现Game Center可能有点乏味。
系统事件 and initCallback
通常, gameNetwork.init() 在 main.lua的开头调用,并在应用的运行期间不会再接触到。 关于gameNetwork.init(),对Game Center主要有两个方面的差异。
第一个区别是,因为Game Center是一个iOS中全系统的进程,每次用户暂停您的应用程序(例如,用户按下“Home”按钮或切换到不同的应用程序),就退出GameCenter(对您的应用程序)。因此,每次收到“applicationStart”系统事件,都要调用gameNetwork.init()。
第二个区别是,使用Game Center,您可以指定initCallback函数,当初始化请求完成时它被调用(这让你有机会在用户登录,拒绝或者如果它们是离线不能访问Game Center功能时做一些事情)。
如何通过gameNetwork.init()使用Game Center作为网络提供商,下面是一个例子:
local gameNetwork = require "gameNetwork" local loggedIntoGC = false -- called after the "init" request has completed local function initCallback( event ) if event.data then loggedIntoGC = true native.showAlert( "Success!", "User has logged into Game Center", { "OK" } ) else loggedIntoGC = false native.showAlert( "Fail", "User is not logged into Game Center", { "OK" } ) end end -- function to listen for system events local function onSystemEvent( event ) if event.type == "applicationStart" then gameNetwork.init( "gamecenter", initCallback ) return true end end Runtime:addEventListener( "system", onSystemEvent )
在您的initCallback监听功能,事件表包括一个属性,event.data,当Game Center登录成功则设为true,登录失败则设为nil。主要用途是避免在用户没有登录成功的情况下调用gameNetwork.request(),欲了解更多信息,请参阅更新
Game Center Requests
当使用Game Center作为你的供应商,以下的字符串可以配合gameNetwork.request()使用:
- setHighScore
- loadScores
- loadLocalPlayer
- loadPlayers
- loadFriends
- loadAchievements
- unlockAchievement
- resetAchievements
- loadAchievementDescriptions
- loadFriendRequestMaxNumberOfRecipients
- loadLeaderboardCategories
- loadPlayerPhoto
- loadAchievementImage
- loadPlaceholderCompletedAchievementImage
- loadIncompleteAchievementImage
请参阅的gameNetwork.request()API文档,以了解需要通过上述这些请求传递的不同类型的数据。上述大部分请求允许你指定一个监听器,用来收到请求的数据。Game Center最令人困惑的地方是要知道什么样的数据返回到您的回调监听事件表。作为提醒,此信息可以随时在gameNetwork.request()API文档页面找到,还有在官方游戏套件文档里独立类引用页面内可以找到。如果一切都失败了,你可以随时转换JSON字符串通过原始警报显示到您的设备的屏幕上。下面是一个例子,展示怎么来配合“loadFriends”请求:
local gameNetwork = require "gameNetwork" local json = require "json" -- callback listener for Game Center requests local function requestCallback( event ) if event.type == "loadFriends" then local data = json.encode( event.data ) -- show encoded json string via native alert native.showAlert( "event.data", data, { "OK" } ) end end gameNetwork.request( "loadFriends", { listener=requestCallback } )