Reputation: 31
I have a screen called MenuScreen that sets a new screen, GameScreen, when a new game button is pressed. When this happens, the screen flickers between MenuScreen and GameScreen, like MenuScreen is being hidden. Here is the code for the MenuScreen, GameScreen and Input Processor.
Note: right now, GameScreen is just written to show a purple background.
MenuScreen
public class MenuScreen implements Screen {
private TextureRegion title;
private TextureRegion newgameup;
private TextureRegion loadgameup;
private NewGameButton newgame;
private SpriteBatch batcher;
float screenWidth = Gdx.graphics.getWidth();
float screenHeight = Gdx.graphics.getHeight();
private float height;
private float width;
private MyGame game;
private OrthographicCamera cam;
private InputHandler inputHandler;
private float timer;
public MenuScreen(MyGame game) {
this.game = game;
}
@Override
public void show() {
Gdx.app.log("MenuScreen", "show method");
title = AssetLoader.title;
newgameup = AssetLoader.newgameup;
loadgameup = AssetLoader.loadgamedwn;
width = 800; // Gdx.graphics.getWidth();
height = 480; // Gdx.graphics.getHeight();
cam = new OrthographicCamera();
cam.setToOrtho(false, 800, 480);
batcher = new SpriteBatch();
batcher.setProjectionMatrix(cam.combined);
inputHandler = new InputHandler(game, width, height);
Gdx.input.setInputProcessor(inputHandler);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batcher.begin();
batcher.draw(title, (width / 2 - title.getRegionWidth() / 2),
(height / 2 + 25), 288, 52);
inputHandler.getNewgame().draw(batcher);
inputHandler.getLoadgame().draw(batcher);
batcher.end();
if (game.isGameScreen()) {
timer += delta;
if (timer > 1) {
game.setScreen(new GameScreen(game));
}
}
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}
GameScreen
public class GameScreen implements Screen {
private MyGame game;
private SpriteBatch batcher;
public GameScreen(MyGame game) {
this.game = game;
}
@Override
public void show() {
Gdx.app.log("GameScreen", "show method");
Gdx.gl.glClearColor(255/255.0f, 50/255.0f, 255/255.0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batcher = new SpriteBatch();
}
@Override
public void render(float delta) {
batcher.begin();
batcher.end();
}
}
InputHandler
public class InputHandler implements InputProcessor{
private NewGameButton newgame;
private SimpleButton loadgame;
private float width, height;
private MyGame game;
public InputHandler(MyGame game, float width, float height) {
Gdx.app.log("InputHandler", "constructor");
this.game = game;
this.width = width;
this.height = height;
newgame = new NewGameButton((width / 2 - AssetLoader.newgameup.getRegionWidth() / 2),
(height / 2 - 40), (float) 200, (float) + 35, AssetLoader.newgameup, AssetLoader.newgamedwn);
loadgame = new SimpleButton((width / 2 - AssetLoader.loadgameup.getRegionWidth() / 2),
(height / 2 - 100), (float) 186, (float) + 37, AssetLoader.loadgameup, AssetLoader.loadgamedwn);
}
@Override
public boolean keyDown(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyTyped(char character) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
Gdx.app.log("InputHandler", "touch down"+screenX + "," +screenY);
Gdx.app.log("InputHandler", "activescreen: "+game.activescreen);
if (game.isMenuScreen()) {
newgame.isTouchDown(screenX, screenY);
}
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
if (game.isMenuScreen()) {
if (newgame.isTouchUp(screenX, screenY)) {
game.gamescreen();
return true;
}
}
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean scrolled(int amount) {
// TODO Auto-generated method stub
return false;
}
public NewGameButton getNewgame() {
return newgame;
}
public SimpleButton getLoadgame() {
return loadgame;
}
public void setNewgame(NewGameButton newgame) {
this.newgame = newgame;
}
public void setLoadgame(SimpleButton loadgame) {
this.loadgame = loadgame;
}
}
Upvotes: 1
Views: 512
Reputation: 31
So after great frustration, I realized the simple mistake I'd made shortly after posting my question: I was calling my Gdx.gl.glClear() and Gdx.gl.Clear() methods in show() rather than render().
Upvotes: 2