如何结合Scene2d和Bullet?

时间:2019-05-27 15:28:28

标签: java libgdx bullet

我想在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();
    }
}

我可能只是在render方法中错过了一个简单的标志。如果我调用Gdx.gl.glClear方法,则只能看到一个或另一个。

我还想将子弹动画部分限制在屏幕上的特定区域,这样我想在舞台上拥有的其他元素不会受到它的阻碍,但我还没有弄清楚如何做到这一点。 / p>

1 个答案:

答案 0 :(得分:0)

可以按照Tenfour04的建议在render方法中更改顺序。
我只是在这里更新,以将此问题标记为已回答。

    @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();
    }