我有两个clases,一个用于main方法,另一个用于splash。但是,在这两者之间切换不起作用。我想在Splash类中绘制一个图像,但它立即变黑了。当我将代码从初始化移动到主类时,图像就出现了。
主要课程:
public class Main extends Game {
public static int WIDTH, HEIGHT;
public void create () {
WIDTH = Gdx.graphics.getWidth();
HEIGHT = Gdx.graphics.getHeight();
setScreen(new Splash());
}
public void render () { }
public void dispose() { super.dispose(); }
public void pause() { super.pause(); }
public void resize(int width, int height) { super.resize(width, height); }
public void resume() { }
}
Splash class:
public class Splash implements Screen {
private Sprite splash;
private SpriteBatch sb;
public void show() {
sb = new SpriteBatch();
Texture splashTexture = new Texture(Gdx.files.internal("res/img/splash.png"));
splash = new Sprite(splashTexture);
splash.setSize(Main.WIDTH, Main.HEIGHT);
Gdx.gl.glClearColor(0, 0, 0, 1);
}
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
sb.begin();
splash.draw(sb);
sb.end();
}
public void resize(int width, int height) { }
public void resume() { }
public void dispose() { }
public void hide() { }
public void pause() { }
}
任何想法,什么可能导致在Splash类中不呈现图像的问题?
更新1:我发现,Splash类中的render()方法甚至没有被调用(但是show()方法会这样做)
答案 0 :(得分:1)
您应该从游戏类中调用render方法。如果你不打电话,没有人会为你做这件事。你不应该覆盖你所做的游戏类的渲染方法而你是空的,所以它不会为你调用任何东西。
让我们来看看Game类。它确实实现了ApplicationListener接口的所有方法(而不是create()
)。因此,您无需覆盖任何内容。只需删除您的:
public void render () { }
public void dispose() { super.dispose(); }
public void pause() { super.pause(); }
public void resize(int width, int height) { super.resize(width, height); }
public void resume() { }
它应该可以正常工作。尽管这些都是无用的方法。他们什么也没做,只是打电话给超级班,所以你为什么写这些。如果您还没有写过它会自动调用超级方法。
但是,如果您想要自己处理这些内容,例如在设置新屏幕之前调用屏幕上的dispose或调用init,则需要编写自己的“游戏”类来实现ApplicationListener
接口。< / p>
为了让你知道如何做这个病,发布一个我用于某些测试的小例子:
public class MyGameClass implements ApplicationListener {
private Screen curScreen; // the current screen
@Override
public void create(){
Gdx.graphics.getWidth();
Gdx.graphics.getHeight();
Intro temp = new Intro(this);//just an example of the first screen to load up
setScreen(temp);
}
public void setScreen(Screen s) {
if (curScreen != null) {
curScreen.hide();
curScreen.dispose();
}
curScreen = s;
curScreen.show();
curScreen.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
s.init();
}
@Override
public void dispose() {
curScreen.dispose();
}
@Override
public void render() {
curScreen.render(Gdx.graphics.getDeltaTime()); //call the rendermethod with the delta time as parameter
}
@Override
public void resize(int width, int height) {
curScreen.resize(width, height);
}
@Override
public void pause() {
curScreen.pause();
}
@Override
public void resume() {
curScreen.resume();
}
}