如何结合 Scene2d 和 Bullet?
How to combine Scene2d and 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();
}
}
我可能只是错过了渲染方法中的一个简单标志。如果我调用 Gdx.gl.glClear 方法,我只能看到一个或另一个。
我也想把子弹动画部分限制在屏幕上的特定区域,这样我想在舞台上的其他元素就不会被它挡住,但我还没有想出怎么做.
按照 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();
}
我想在 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 方法,我只能看到一个或另一个。
我也想把子弹动画部分限制在屏幕上的特定区域,这样我想在舞台上的其他元素就不会被它挡住,但我还没有想出怎么做.
按照 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();
}