【问题标题】:How to combine Scene2d and Bullet?如何结合 Scene2d 和 Bullet?
【发布时间】:2019-10-13 04:41:05
【问题描述】:

我想在 scene2d 舞台上使用子弹显示一些动画。 不需要与子弹部分交互,它应该只是一个动画。

如果需要,我还可以添加 SimpleSimulator(因此该文件仍然有大约 200 行,即使在删除了我不需要的内容之后也是如此)。

SimpleSimulator#create 的调用基本上设置了世界、环境和对象。 (整个子弹的东西是基于https://github.com/xoppa/blog/blob/master/tutorials/src/com/xoppa/blog/libgdx/g3d/bullet/dynamics/step6/BulletTest.java

public class SimpleExample implements ApplicationListener {

    private class ExampleStage extends Stage {

        public ExampleStage() {

            Image background = new Image(new Texture(Gdx.files.internal("background.png")));
            addActor(background);

        }
    }

    private Camera cam;
    private Stage stage;
    private SimpleSimulator simulator;

    @Override
    public void create() {

        Bullet.init();

        cam = new OrthographicCamera(30, 30);
        cam.lookAt(0f, 1f, 0f);
        cam.near = 0f;
        cam.far = 500f;
        cam.update();

        this.stage = new ExampleStage();

        simulator = new SimpleSimulator();
        simulator.create();

    }

    @Override
    public void render() {

        stage.draw();
        stage.act();

        //simulator.simulate();

        // if added only the bullet part will be animated,
        // if not only scene2d
        // Gdx.gl.glClearColor(0f, 0f, 0f, 1.f);
        // Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        simulator.modelBatch.begin(cam);
        simulator.modelBatch.render(simulator.instances, simulator.environment);
        simulator.modelBatch.end();
    }

    public void resize(int width, int height) {}
    public void pause() {}
    public void resume() {}

    @Override
    public void dispose() {
        stage.dispose();
        simulator.dispose();
    }
}

我可能只是错过了渲染方法中的一个简单标志。如果我调用 Gdx.gl.glClear 方法,我只能看到其中一个。

我也想将子弹动画部分限制在屏幕上的特定区域,这样我想在舞台上拥有的其他元素就不会被它阻挡,但我还没有想出如何做到这一点。

【问题讨论】:

  • glClear 线应该在您的渲染方法的开头(或者至少在您开始绘制任何东西之前。您正在清除前一帧上绘制到屏幕上的内容。顺便说一下,您应该调用@987654325 @ before stage.draw() 所以你不会在它绘制的所有内容上引入一帧延迟。
  • @Tenfour04:我可以发誓我以前尝试过,但看来你是对的。至少我现在看到了一些东西,只是不是我所期待的。我去看看。
  • 在搜索时发现:stackoverflow.com/questions/42936070/…。至少他在评论中给出答案的例子对我有用,但我的模拟器在那里也做了一些奇怪的事情。
  • @Tenfour04:现在可以了。在试图弄清楚这一点时,我曾玩过一些对象的坐标,但在恢复更改后它看起来很好。

标签: java libgdx bullet


【解决方案1】:

按照Tenfour04 的建议更改渲染方法中的顺序就可以了。
我只是在此处更新此问题以将此问题标记为已回答。

    @Override
    public void render() {

        Gdx.input.setInputProcessor(stage);

        simulator.simulate();

        Gdx.gl.glClearColor(0f, 0f, 0f, 1.f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        stage.act();
        stage.draw();

        simulator.modelBatch.begin(cam);
        simulator.modelBatch.render(simulator.instances, simulator.environment);
        simulator.modelBatch.end();
    }

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2016-11-09
    • 1970-01-01
    • 2012-08-24
    • 2015-10-08
    • 2021-08-03
    相关资源
    最近更新 更多