我想知道如何将屏幕从主菜单更改为游戏本身,但我遇到了麻烦,我很感激帮助。我想要做的是当我按 btn.Play 时,它会将屏幕从主菜单更改为游戏。
这是我的代码:
游戏:
@Override
public void create(){
batch = new SpriteBatch();
Up = new Texture("left.png");
cam = new OrthographicCamera();
cam.setToOrtho(false,1280,720);
//creates the square in the middle of the screen
square = new Rectangle();
square.x = 630;
square.y = 720 / 2 - 32 /2;
square.width = 32;
square.height = 32;
//code
}
//code
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.begin();
batch.draw(Up, square.x, square.y);
//code
batch.end();
}
屏幕(用于显示第一个屏幕):
public class Screens extends com.badlogic.gdx.Game {
//creates the timing on the splash screen
@Override
public void create() {
startTime = TimeUtils.millis();
//sets the next screen as the splash screen
setScreen( new SplashScreen(this));
}
@Override
public void render(){
super.render();
rendCount++;
}
@Override
public void dispose(){
endTime = TimeUtils.millis();
}
闪屏:
public class SplashScreen implements Screen {
public SplashScreen(Game g) {
myGame = g;
cam = new OrthographicCamera();
cam.setToOrtho(false, 1280, 720);
}
@Override
public void show() {
//image of the splash screen
splashTexture = new Texture("splash.jpg");
//timer starts
timeStart = TimeUtils.millis();
}
@Override
public void render(float delta) {
SpriteBatch batch = new SpriteBatch();
//draws the image on screen
batch.setProjectionMatrix(cam.combined);
batch.begin();
batch.draw(splashTexture, 0, 0);
batch.end();
rendCounter++;
// if the timer is higher than 5 secs goes to the main screen
if(TimeUtils.millis() > (timeStart+5000)) {
myGame.setScreen(new MainScreen());
}
}
@Override
public void dispose(){
splashTexture.dispose();
}
主菜单:
public class MainScreen implements Screen{
private SpriteBatch batch;
private OrthographicCamera cam;
private Stage stage;
private TextButton btnPlay, btnExit;
private BitmapFont font;
private Skin skin;
private TextureAtlas atlas;
public MainScreen() {
cam = new OrthographicCamera();
cam.setToOrtho(false, 1280,720);
batch = new SpriteBatch();
}
@Override
public void show() {
// creates the pack for the buttons, its skin, the font used on the buttons, and the stage(screen)
atlas = new TextureAtlas("buttons.pack");
skin = new Skin();
skin.addRegions(atlas);
font = new BitmapFont(Gdx.files.internal("font.fnt"), false);
stage = new Stage();
stage.clear();
Gdx.input.setInputProcessor(stage);
// sets the style of the buttons
TextButton.TextButtonStyle style = new TextButton.TextButtonStyle();
style.up = skin.getDrawable("btn_up");
style.down = skin.getDrawable("btn_down");
// sets the font of the buttons
style.font = font;
//creates the play button with the text, its position and the size
btnPlay = new TextButton("Play", style);
btnPlay.setSize(350, 150);
btnPlay.setPosition(450, 400);
btnPlay.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
}
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
((Game) Gdx.app.getApplicationListener()).setScreen(new Game());
dispose();
}
});
btnExit = new TextButton("Exit", style);
btnExit.setSize(350,150);
btnExit.setPosition(450, 150);
btnExit.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
}
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
Gdx.app.exit();
dispose();
}
});
stage.addActor(btnPlay);
stage.addActor(btnExit);
}
@Override
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(0, 0, 0, 1);
batch.setProjectionMatrix(cam.combined);
stage.act();
batch.begin();
stage.draw();
batch.end();
}
@Override
public void dispose() {
batch.dispose();
stage.dispose();
atlas.dispose();
skin.dispose();
font.dispose();
}
使用时在MainMenu类中:
btnPlay.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
}
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
((Game) Gdx.app.getApplicationListener()).setScreen(new Game());
dispose();
}
});
它崩溃了应用程序。有什么建议吗?