【发布时间】: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();
接下来正在加载。
异常没有被捕获,我删除了它,一切都和以前一样。
【问题讨论】:
标签: java android libgdx google-play-games