类型 库 修订版 版本 2024.3703 关键词 GameCircle,Whispersync for Games,成就,排行榜,亚马逊 **平台** 安卓 系统
GameCircle 插件使基于 Android 的 Corona 游戏能够访问 Amazon GameCircle 服务中的所有功能。使用 Amazon 服务器记录玩家成就,维护排行榜,并利用 Amazon 强大的 Whispersync for Games 功能在云中维护游戏数据。
要使用 GameCircle 插件,您必须首先在 Amazon 服务器上为您的游戏创建 GameCircle 配置并使用数据填充它。
为此,请访问 Amazon 的 GameCircle API 文档。您可能需要阅读并四处搜索以了解 GameCircle 的一般工作原理,因为此插件只是 Lua 游戏代码与
完成所有这些操作后,设置成就、排行榜和安全配置文件后,您需要执行最后一步。您需要获取与您的包名称和安全配置文件关联的 API 密钥。它通常是一个很长的字母和数字字符串,没有空格。它可以在应用程序安全配置文件的“Kindle/Android 设置”下找到。您需要将整个密钥复制并粘贴到一个空文本文件中,然后将该文本文件另存为 `api_key.txt` 到您的项目目录中。这就是 GameCircle API 向 Amazon 服务器标识自身的方式;没有有效的 API 密钥,该插件将无法工作。生成 API 密钥的具体说明可以在此处找到。
在 Amazon 服务器上设置好游戏并复制 API 密钥后,您就可以在应用程序中包含并集成 GameCircle 插件了。一开始,您只需调用两个函数即可使 GameCircle 为您工作。
local gamecircle = require( "plugin.gamecircle" ) gamecircle.Init( true, true, true )
`require()` 行将 GameCircle 插件加载到您的应用程序中。`Init()` 函数是您告诉插件您希望向用户提供 GameCircle 的哪三个功能的方式。除此之外,请阅读下面的
这些是关于 GameCircle 插件和 GameCircle SDK 需要了解的重要事项。
此插件仅适用于 Android。虽然代码可以在 Corona 模拟器中编译,但对 GameCircle 插件的所有函数调用都将返回 `nil`。这是设计使然,因为 GameCircle SDK 本身仅适用于 Android。
要与您在草稿模式下创建的排行榜和成就进行交互,您需要将您正在测试的任何 GameCircle 玩家个人资料名称添加到测试帐户白名单中。查看 GameCircle 的测试您的游戏文档,了解如何执行此操作。
Whispersync for Games 数据无法删除(Amazon 施加的限制),因此在为 Whispersync for Games 开发时要小心,并确保在开发过程中使用 GameCircle 测试帐户,以确保您不会污染与您的个人或您公司 Amazon 帐户关联的 Whispersync 数据垃圾数据.
如果您已经熟悉 Amazon 的 Whispersync for Games,请务必阅读有关此插件如何模拟 Whispersync 使用数据对象来设置和检索数据的文档。无法在不破坏预期功能的情况下将 Whispersync 使用的数据对象直接拉入 Lua。因此,该插件近似地实现了该功能。您可以在 Whispersync 部分阅读更多内容。
该插件尝试在 GameCircle SDK 提供的功能之间保持一对一的关系。如果您对特定功能和/或函数提供的数据的意义感到好奇,请查看 Amazon 的 GameCircle 文档。
这些函数提供了一些通用功能,它们要么与特定的 GameCircle 功能无关,要么对所有三个功能都有用。
这些函数提供对 Amazon GameCircle API 的成就功能的访问。请记住在尝试使用这些函数之前在 Amazon 服务器上设置成就。
这些是 Achievement 函数直接或通过函数回调返回的数据结构。
这些函数提供对 Amazon GameCircle API 的排行榜功能的访问。请记住在尝试使用这些函数之前在 Amazon 服务器上设置排行榜。
这些是 Leaderboard 函数直接或通过函数回调返回的数据结构。
本节中的信息主要针对以前使用过基于 Java 的 GameCircle SDK 的用户。它提供了有关 GameCircle SDK 和此插件的实现之间重要区别的信息。
与 Amazon 的 GameCircle SDK 相比,此插件在 Whispersync for Games 的实现方面差异最大。Whispersync 功能仍然具有相同级别的功能和易用性,但由于 Java 和 Lua 作为编程语言之间的根本差异,该插件必须略有不同。
在插件中,您使用函数将表示一段数据的对象放入 Whispersync 的系统中。请参阅以下在 Java 中完成的示例
//Java Example using GameCircle SDK String key = "level6LocalHighScore" GameDataMap gameDataMap = AmazonGamesClient.getWhispersyncClient().getGameData(); SyncableNumber syncNumber = gameDataMap.getHighestNumber(key); syncNumber.Set(8675309)
在上面的示例中,作为开发人员,您可以只保留我们刚刚创建的 `syncNumber` 并在需要时不断为其分配新值。然后,Whispersync 的系统将在后台处理将更新的数据保存在本地和云中。此功能无法在 Corona 的 Lua 语言中复制,因为无法在不破坏其内部功能的情况下将 GameCircle SDK 对象(如 `SyncableNumber`)转换为 Lua 表/对象。
因此,此插件的工作原理类似于 C++ 和 C# 等语言中的字典/哈希表。以下是使用此插件在 Lua 中完成的上述相同示例
--Lua example using this GameCircle plugin local gamecircle = require( "plugin.gamecircle" ) local key = "level6LocalHighScore" gamecircle.Init( false, false, true ) gamecircle.Whispersync.SetHighestNumber( key, 8675309, "INT" )
从插件中可以看出,您无需使用键来获取对 SyncableNumber
的引用,而是使用键通过 SetHighestNumber()
函数来设置值。从本质上讲,这是此插件与 GameCircle SDK 之间的唯一区别。您需要使用类似字典的函数来访问数据,而不是获取表示数据的对象并对其进行更新。Whispersync 的系统仍然会在本地和云端执行数据的后台保存和更新。作为开发者,您仍然可以通过提供回调函数来挂钩到 Whispersync 的事件系统。
GameData
对象的处理方式也存在关键区别,但这将在下面的 GameData 导航部分中讨论。
这些函数允许设置、获取和操作使用 Whispersync for Games 存储的数据。有关 GameCircle 如何使用 Whispersync for Games 的更多信息,请参阅亚马逊的 [Whispersync 的 GameCircle 文档] (https://developer.amazon.com/public/apis/engage/gamecircle/docs/whispersync)。
当您想要统计玩家的操作并确保在他们可能使用的所有设备上都有准确的记录时,请使用累积数字。例如,所有被杀敌人的数量。
开发者可以将各种数据保存为字符串。如果从云端下载的数据更新且与当前本地数据不匹配,则数据将被标记为“冲突”。然后,开发者可以编写代码来管理合并。这可以是从自动合并信息的重要方面到询问用户他们想要保留哪个数据集。
当您想要跟踪多个设备上某个值的最高数字时,请使用最高数字。例如,玩家在某个关卡上的个人历史最高分。
当您只想跟踪多个设备上某个值的绝对最新数字时,请使用最新数字。例如,玩家在某个关卡上的最新得分。
当您想要跟踪多个设备上某个值的最低数字时,请使用最低数字。例如,玩家完成某个关卡的最短时间。
就像最高数字一样,但它维护一个从高到低的过去条目列表。默认列表长度限制为 5
。
就像最新数字一样,但它维护一个从最新到最旧的过去条目列表。默认列表长度限制为 5
。
就像最低数字一样,但它维护一个从低到高的过去值列表。默认列表长度限制为 5
。
与最新数字的工作方式相同,但使用字符串代替。
与最新数字列表的工作方式相同,但使用字符串代替。
一组未排序的字符串列表,它们已被存储在一个组中。此函数对于记录游戏中指南已解锁的条目等情况很有用。
这些是由 Whispersync 函数直接或通过函数回调返回的数据结构。
要使用此插件,请在 build.settings
的 plugins
表中添加一个条目。添加后,构建服务器将在构建阶段集成插件。
settings = { plugins = { ["plugin.gamecircle"] = { publisherId = "COM_INNOVATIVELEISURE" }, }, }
插件的 Solar2D Native 版本可以通过与普通版本类似的方式获得。您必须下载插件的软件包并包含其中包含的四个 .jar
文件。
AmazonInsighss-android-sdk-2.1.26.jar
gamecirclesdk.jar
login-with-amazon-sdk.jar
plugin.gamecircle.jar
除了在 Solar2D Native 项目的相应部分中包含这四个 .jar
文件之外,您还必须对 Android 清单进行以下更改。
如果您的应用中还没有以下两个用户权限,则必须将它们添加到您的应用中。
“android.permission.INTERNET”
“android.permission.ACCESS_NETWORK_STATE”
您还必须将以下内容添加到您的清单中,并将 "@USER_ACTIVITY_PACAKGE@"
替换为您在清单文件顶部附近设置的软件包标识符。
<activity android:name="com.amazon.ags.html5.overlay.GameCircleUserInterface" android:theme="@style/GCOverlay" android:hardwareAccelerated="false"></activity> <activity android:name="com.amazon.identity.auth.device.authorization.AuthorizationActivity" android:theme="@android:style/Theme.NoDisplay" android:allowTaskReparenting="true" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="@USER_ACTIVITY_PACKAGE@" android:scheme="amzn" /> </intent-filter> </activity> <activity android:name="com.amazon.ags.html5.overlay.GameCircleAlertUserInterface" android:theme="@style/GCAlert" android:hardwareAccelerated="false"></activity> <receiver android:name="com.amazon.identity.auth.device.authorization.PackageIntentReceiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package" /> </intent-filter> </receiver>
您可以在此处访问示例代码。