如何使用 gdx-gamesvcs 将游戏数据保存到云端?
Posted
技术标签:
【中文标题】如何使用 gdx-gamesvcs 将游戏数据保存到云端?【英文标题】:How to save game data to the cloud using gdx-gamesvcs? 【发布时间】:2020-12-10 03:45:05 【问题描述】:我想在 libgdx 引擎上的游戏中实现 Google Play 游戏服务。我为此尝试使用 gdx-gamesvcs。但我无法保存数据。我从示例中了解到,正在保存一个值,而不是整个游戏状态。所以我决定检查一下:使用gsClient.loadGameState
和gsClient.saveGameState
保存并加载一个值。我故意从设备中删除了游戏数据。但结果,不仅测试值发生了变化,许多其他值也发生了变化。我以为是整个游戏的状态正在被保存,但是得到的值不符合游戏的逻辑,无法在里面获取。
我应该如何使用这个工具,它是否值得,还是使用 libgdx 本身提供的更好?
下面是一段代码:
if (gsClient.isSessionActive())
try
gsClient.saveGameState("data", intToByteArray(testValue), 0, null);
catch (UnsupportedOperationException unsupportedOperationException)
if (gsClient.isSessionActive())
try
gsClient.loadGameState("data", new ILoadGameStateResponseListener()
@Override
public void gsGameStateLoaded(byte[] gameState)
if (gameState != null)
setTestValue(bytesToInt(gameState));
);
catch (UnsupportedOperationException unsupportedOperationException)
UPD
是的,保存到云和设备都发生,为了保存到我使用首选项的设备。我在游戏中有一个谷歌帐户登录按钮,它可以工作,我多次看到我的帐户级别的这个标准栏,当我登录时出现在顶部。一切都在开发者控制台中设置,我有一个 id成就和排行榜。在代码中,我像这样与客户端一起工作(在create()
方法中):
public IGameServiceClient gsClient;
if (gsClient == null)
gsClient = new MockGameServiceClient(1)
@Override
protected Array<ILeaderBoardEntry> getLeaderboardEntries()
return null;
@Override
protected Array<String> getGameStates()
return null;
@Override
protected byte[] getGameState()
return new byte[0];
@Override
protected Array<IAchievement> getAchievements()
return null;
@Override
protected String getPlayerName()
return null;
;
gsClient.setListener(this);
gsClient.resumeSession();
接下来正在加载。 异常没有被捕获,我删除了它,一切都和以前一样。
【问题讨论】:
【参考方案1】:好吧,libgdx 没有提供内置的云保存,因此很难使用它。 :-)
在任何情况下,您都应该保存到本地和云端,因为云端加载其状态的速度不是很快。
我看不出你的代码有什么问题,除了你吞下了一个UnsupportedOperationException
,如果你没有激活云保存功能就会抛出这个问题。所以有趣的问题是:如果您不吞下异常会发生什么,并且您是否在启用云保存的情况下初始化GpgsClient
?您是否真的登录了 Gpgs,并且该功能是否也在您的开发者控制台中激活?
【讨论】:
我已经更新了问题中的信息,你可以看看 从云端加载数据时会话没有时间开始,所以我根本没有进入gsClient.loadGameState()
。
那你应该稍后打电话给loadGameState
我创建了一个加载屏幕,它的问题消失了,虽然我显然写得不好,而且从云加载后我总是把所有变量都归零。我想我解决了这个问题,但我根本不明白是什么原因造成的。【参考方案2】:
主要问题是gameState
是null
,这是因为你在开发者控制台中启用保存功能后必须等待24小时,以及关于清除google play游戏内存的建议对测试设备没有帮助。一段时间后gameState
开始传递现有值,但我开始遇到图形流问题,可能是由于异步加载。
【讨论】:
以上是关于如何使用 gdx-gamesvcs 将游戏数据保存到云端?的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSData 和 NSMutableArrays 保存 OS X 游戏数据