Когда моя игра заканчивается, я пытаюсь изменить экран на конечный игровой экран, но вместо этого он просто мигает текущим экраном игры.Смена конца экрана игры в libgdx
Я верю, что он очищает сцену, но затем снова рисует ее, не переходя к следующему экрану? Как будто его по-прежнему зацикливает вызов рендеринга.
Можете ли вы посоветовать, как правильно переключать экран.
@Override
public void render(float v) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
if (state == gamestate.PAUSED) {
// draw pause screen
}
else if (state == gamestate.GAMEOVER || score <= 0) {
game.setScreen(new endGameScreen(game, score));
stage.clear();
return;
}
else {
player.update();
stage.draw();
batch.begin();
mBtn.setPosition((cam.position.x - (Gdx.graphics.getWidth()/2)) + 10, (cam.position.y - (Gdx.graphics.getHeight()/2)) + 10);
pBtn.setPosition((cam.position.x + (Gdx.graphics.getWidth()/2)) - pauseWidth, (cam.position.y - (Gdx.graphics.getHeight()/2)) + 10);
batch.draw(player.getCurrentFrame(), player.getPosition().x, player.getPosition().y);
cam.position.set(player.getPosition().x, Gdx.graphics.getHeight()/2, 0);
batch.setProjectionMatrix(cam.combined);
cam.update();
batch.end();
if(player.getPosition().x >= finishLine.getX()) {
System.out.println("End Game!!!");
endGame();
}
}
}
Хорошо, поэтому полный код для метода визуализации вверх. Я переместил настройку входного процессора на метод show()
.
Эта проблема может быть вызвана тем, что метод game.setScreen
находится в методе визуализации, но я не уверен, как это реализовать в методе show, так как это происходит, когда актер достигает определенного местоположения, t слушайте входной контакт или что-то еще.
Конец игры экрана
public class endGameScreen implements Screen {
int score = 0;
String scoreTxt = "";
Stage stage;
SpriteBatch batch;
BitmapFont font;
Game game;
public endGameScreen(Game game, int score){
this.score = score;
this.game = game;
}
@Override
public void render(float v) {
batch.begin();
font.setColor(1.0f, 1.0f, 1.0f, 1.0f);
font.draw(batch, scoreTxt, 25, 100);
batch.end();
}
@Override
public void show() {
batch = new SpriteBatch();
font = new BitmapFont(Gdx.files.internal("font.fnt"));
stage = new Stage(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(),true);
}
Недостаточно вашего кода, чтобы увидеть проблему. – Chase
Почему вы устанавливаете свой входной процессор при каждом вызове рендера? Разве это не достаточно, если вы делаете это при показе экрана? Вы тестировали, когда-либо попадаете в ту часть, где ему говорят, чтобы перейти к EndGameScreen? Как правило, я не знаю, действительно ли это такая практика, чтобы сделать все это в вашем цикле рендеринга. Просто постарайтесь сделать это на основе событий ... всякий раз, когда вы достигаете точки, в которой вы меняете свое игровое состояние на игру, просто вызовите метод setScreen(). Или, как только вы узнаете паузу в игре, покажите сцену, на которой включен экран Pause. Я не думаю, что в каждом вызове рендеринга необходимо проверить ... – evident
Хорошо, плохой ход. Да, это доходит до этой точки, потому что я вижу изменение игры. – Wayneio