gpt4 book ai didi

java - (Libgdx 和 Rube Box2d)合并世界

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:02 25 4
gpt4 key购买 nike

好吧好吧,我使用 RubeLoader 在 libgdx 上加载我的 rube 文件。

但是我注意到我只能加载一个 json 文件

代码:

loader = new RubeSceneLoader();
scene = loader.loadScene(Gdx.files.internal("test.json"));
World mWorld ;
mWorld = scene.getWorld();

如你所见,如果我想加载另一个 json 文件,它会因为这一行而破坏前一个文件:

mWorld = scene.getWorld();

所以我的问题是:如何加载多个 json 文件或如何将不同的世界合并为一个?

提前感谢您的回答

最佳答案

我检查了 RubeLoader 和 libGDX 的源代码,看不出它为什么要打破第一世界。之后我自己检查了它(不是很广泛,但我想我涵盖了你的用例)并且它对我来说很好用。

Box2D、LibGDX 和 RubeLoader 支持多世界。但是你当然需要 World 的多个实例。

loader1 = new RubeSceneLoader();
scene1 = loader1.loadScene(Gdx.files.internal("XXXX.json"));
World mWorld1 = scene1.getWorld();

loader2 = new RubeSceneLoader();
scene2 = loader2.loadScene(Gdx.files.internal("ABCD.json"));
World mWorld2 = scene2.getWorld();

现在您有两个 Worlds,它们应该都能正常工作,但此时合并它们并不容易。因为您必须在 mWorld1 中重新创建 mWorld2 中的所有内容,反之亦然。我建议您以编程方式合并这两个 JSON 文件(libGDX 已经有了必要的 JSON 工具,但您可以使用其他小型 json 库,如 Jackson ),然后加载这个合并的场景。这应该比合并两个 Worlds 容易得多。

编辑:如果您不是一开始就需要合并 Worlds,而是在一段时间后合并,最简单的方法是修改 RubeWorldSerializer。具体这部分:

World world = new World(gravity, allowSleep);
world.setAutoClearForces(autoClearForces);
world.setContinuousPhysics(continuousPhysics);
world.setWarmStarting(warmStarting);

尝试找到一种方法来在此处输入您已经存在的 mWorld1 并且在加载第二个场景时,所有 BodiesJoints 应该自动被添加到这个 World,而不是一个全新的。

编辑2:快速了解如何完成:

将此添加到 RubeWorldSerializer:public static World mergeWorld;

像这样更改世界初始化:

World world;
if (RubeWorldSerializer.mergeWorld == null) {
world = new World(gravity, allowSleep);
world.setAutoClearForces(autoClearForces);
world.setContinuousPhysics(continuousPhysics);
world.setWarmStarting(warmStarting);
} else {
world = RubeWorldSerializer.mergeWorld;
}

现在您的加载必须如下所示:

loader1 = new RubeSceneLoader();
scene1 = loader1.loadScene(Gdx.files.internal("XXXX.json"));
World mWorld1 = scene1.getWorld();

RubeWorldSerializer.mergeWorld = mWorld1; // this is important in between your loading.

loader2 = new RubeSceneLoader();
scene2 = loader2.loadScene(Gdx.files.internal("ABCD.json"));
World mWorld2 = scene2.getWorld(); // in theory mWorld2 should be the same like mWorld1 now, and it should be both worlds merged

关于java - (Libgdx 和 Rube Box2d)合并世界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com