教程:Corona集成Game Center(iOS)


由于Game Center功能仅是现有的gameNetwork API的扩展,没有必要去重做每个可以发送到Game Center的请求。你可以查看更新文档中的gameNetwork的init(), request()和show()接口。

相反,我会让你快速概览需要在“苹果方面”(iTunes Connect)做的东西、Corona的“设置”信息以及确保一切应用程序工作正常的特殊的考虑。

iTunes Connect


苹果方面你需要采取的步骤是非常简单的,所以我不会在这方面太深入。总之,你要启用应用程序的Game Center功能,你需要创建Leaderboards(高分板)和Achievements,还有得记住Leaderboards和Achievements中你分配的独立ID。

  1. 点击 ‘Manage Your Applications’ 链接
  2. 点击应用图标
  3. 在右边, 点击 ‘Manage Game Center’ 按钮
  4. 点击‘Enable’ 按钮
  5. 点击在 Leaderboard 和 Achievements 栏下的‘Edit’ 
  6. 添加 Leaderboards 和 Achievements
  7. 记下 ‘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 } )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值