如何使用gdxgamesvc将游戏数据保存到云上?

goqiplq2  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(422)

我想在libgdx引擎上实现googleplay游戏服务。我试过用gdxgamesvc来做这个。但我在保存数据时遇到了问题。我从示例中了解到,保存的是一个值,而不是整个游戏状态。所以我决定检查一下:使用 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是的,保存同时发生在云和设备上,用于保存到我使用首选项的设备上。我在游戏中有一个google帐号登录按钮,它工作正常,我多次看到我帐号级别的这个标准条,它在我登录时出现在顶部。一切都是在开发人员控制台设置太,我有一个成就和排行榜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();

下一步是加载。
异常没有被捕获,我删除了它,一切都像以前一样工作。

rmbxnbpk

rmbxnbpk1#

主要问题是 gameStatenull ,这是因为在开发人员控制台中启用save功能后必须等待24小时,而关于清除测试设备上google play games内存的建议没有帮助。过了一会儿 gameState 开始传递现有的值,但我开始在图形流中遇到问题,可能是由于异步加载。

qyswt5oh

qyswt5oh2#

好吧,libgdx不提供内置的云存储,很难使用它来实现这一点。:-)
在任何情况下,您都应该保存到本地和云,因为云的加载速度不是很快。
我看不出你的代码有什么问题,除了你吞下了一个 UnsupportedOperationException 如果您没有激活云保存功能,则会引发此错误。所以有趣的问题是:如果你不接受这个异常会发生什么,你初始化了吗 GpgsClient 是否启用了云存储?你真的登录到gpgs了吗?这个功能在你的开发者控制台中也被激活了吗?

相关问题