Привет, я являюсь новым для libGDX, и я просто создаю простое игровое приложение. У меня есть экран главного меню и экран уровня для моей игры. Я инициализировал начальный экран в главном меню. Когда я нажимаю кнопку «Воспроизвести» на экране главного меню, я хочу переключить экран на экран выбора уровня, но происходит то, что он меняет экран, но старый тоже делает за ним. Это то, что происходит, когда я нажимаю на кнопку воспроизведения: http://prntscr.com/57teriЛинии LibGDX перекрываются при смене экранов
Класс игры:
public class BallJump extends Game {
MainMenu menu;
LevelSelect levelSelect;
@Override
public void create() {
menu = new MainMenu(this);
levelSelect = new LevelSelect(this);
setScreen(menu);
}
@Override
public void render() {
super.render();
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
@Override
public void dispose() {
super.dispose();
}
}
Главный экран меню:
public class MainMenu implements Screen{
BallJump game;
Stage stage;
GameButton playButton, exitButton;
Texture title;
Sprite test;
SpriteBatch batch;
OrthographicCamera camera;
public MainMenu(BallJump game) {
this.game = game;
}
@Override
public void render(float delta) {
Gdx.gl20.glClearColor(0, 0, 0, 1);
Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
System.out.println("main menu");
stage.act();
stage.draw();
batch.begin();
test.draw(batch);
batch.end();
}
@Override
public void show() {
camera = new OrthographicCamera();
title = new Texture(Gdx.files.internal("images/title.png"));
test = new Sprite(title);
batch = new SpriteBatch();
stage = new Stage();
test.setPosition(Gdx.graphics.getWidth()/7f, Gdx.graphics.getHeight()/1.75f);
playButton = new GameButton("PLAY");
playButton.setPosition(Gdx.graphics.getWidth()/2.5f, Gdx.graphics.getHeight()/2);
playButton.setHeight(50f);
playButton.setWidth(150f);
playButton.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
game.setScreen(game.levelSelect);
dispose();
return true;
}});
stage.addActor(playButton);
exitButton = new GameButton("EXIT");
exitButton.setPosition(Gdx.graphics.getWidth()/2.5f, Gdx.graphics.getHeight()/3);
exitButton.setHeight(50f);
exitButton.setWidth(150f);
exitButton.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
return true;
}});
stage.addActor(exitButton);
Gdx.input.setInputProcessor(stage);
}
@Override
public void hide() {
}
@Override
public void resize(int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.update();
}
@Override
public void dispose() {
batch.dispose();
stage.clear();
stage.dispose();
title.dispose();
}
Уровень экран выбора:
public class LevelSelect implements Screen{
BallJump game;
Stage stage;
TextButton l1, buttonExit;
Texture title;
Sprite test;
SpriteBatch batch;
OrthographicCamera camera;
public LevelSelect(BallJump game) {
this.game = game;
}
@Override
public void show() {
batch = new SpriteBatch();
stage = new Stage();
title = new Texture(Gdx.files.internal("images/level_select.png"));
test = new Sprite(title);
test.setPosition(Gdx.graphics.getWidth()/7f, Gdx.graphics.getHeight()/1.75f);
stage.addActor(l1);
}
@Override
public void render(float delta) {
stage.act();
stage.draw();
batch.begin();
test.draw(batch);
batch.end();
System.out.println("level select");
}
OMG, я не знаю, как я забыл, что ... мне стыдно за себя, впустую 2 часа на том, чтобы выяснить, почему ... спасибо так много: D – user3650664
@ user3650664 Да, это происходит для всех нас в какой-то момент. – MadEqua
@ user3650664 немного «трюк», который я использую в моем текущем проекте: я называю 'Gdx.gl20.glClearColor (0, 0, 0, 1);' и 'Gdx.gl20.glClear (GL20.GL_COLOR_BUFFER_BIT);' in класс 'Game' (в вашем случае класс' BallJump'), rigth перед вызовом 'super.render (delta)'. Поэтому перед тем, как класс 'Game' вызывает' render (delta) 'для' Screen', он очищает все. – Springrbua