簡體   English   中英

無法切換屏幕[Libgdx]

[英]Can't switch screen [Libgdx]

我是libgdx的新手,我不知道自己做錯了什么。 在我的游戲中,我只想在2個screen之間切換(第一個是menuScreen,第二個是gameScreen)。 我已經創建了這兩個screen和一個游戲類,一切看起來都還不錯。 但是當我調用我的方法setScreen(new GameScreen())什么都沒有發生。 我還應該說,我在上一個項目中使用了screengame類,並且一切正常,當我將當前代碼與上一個代碼進行比較時,我看不到任何區別,因此非常奇怪。

這是我的MenuScreen類:

MenuScreen implements Screen {

private SpriteBatch batch ;
private Texture texture;
private float timePassed;


public MenuScreen() {
    timePassed = 0;
    batch = new SpriteBatch();
    texture = new Texture("texture.png");

@Override
public void render (float delta) {
    timePassed += Gdx.graphics.getDeltaTime();
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    if (timePassed > 5) {GameClass.getInstance().setScreen(new GameScreen());} //it looks strange, but it's to check if all works properly
    batch.begin();
    batch.draw(texture, 0, 0);
    batch.end();
}

@Override
public void dispose() {
    batch.dispose();
    texture.dispose();
}

@Override
public void hide() {

}

@Override
public void resume() {

}

@Override
public void pause() {

}

@Override
public void resize(int width, int height) {

}

@Override
public void show() {

}}

這是我的GameScreen類:

GameScreen implements Screen {

private SpriteBatch batch2 ;
private Texture texture2;


public MenuScreen() {
    batch2 = new SpriteBatch();
    texture2 = new Texture("texture2.png");
}
@Override
public void render (float delta) {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch2.begin();
    batch2.draw(texture2, 0, 0);
    batch2.end();
}

@Override
public void dispose() {
    batch2.dispose();
    texture2.dispose();
}

@Override
public void hide() {

}

@Override
public void resume() {

}

@Override
public void pause() {

}

@Override
public void resize(int width, int height) {

}

@Override
public void show() {

}}

Game類:

public class ClassGame extends Game {
public static ClassGame getInstance(){
    ClassGame instance = new ClassGame();
    return instance;
}
@Override
public Screen getScreen() {
    return super.getScreen();
}

@Override
public void setScreen(Screen screen) {
    super.setScreen(screen);
}
@Override
public void resize(int width, int height) {
    super.resize(width, height);
}

@Override
public void render() {
    super.render();
}

@Override
public void resume() {
    super.resume();
}

@Override
public void pause() {
    super.pause();
}

@Override
public void dispose() {
    super.dispose();
}

public ClassGame() {
    super();
}

@Override
public void create() {
    MenuScreen menuScreen = new MenuScreen();
    setScreen(menuScreen);
}}

這是我針對同一問題所做的工作,我為兩個屏幕設置了三個類,以便在它們之間進行切換。 在這里,我使用圖像角色作為按鈕在第二個和第三個之間切換。在每個類中我還使用了兩個構造函數,其中一個沒有參數的構造函數,下面是我的代碼希望您能得到它。 我的主要課程代碼:

public class First extends Game{
private Game game;
public Main(){ game=this; }
public void create() {
    game.setScreen(new Second(game)); }}

以下是我的第一個屏幕課程代碼

public class Second implements Screen{
private Game second;
public Second(Game second){this.second=second;}
public Second(){}
// your code
Stage myStage=new Stage(new ScreenViewport());
Group myGroup=new Group();
Image secondButton=new Image(new Texture(Gdx.files.internal("image.png")));
public void show(){
    myGroup.addActor(secondButton);
    secondButton.addListener(new InputListener(){
    second.setScreen(new Third(second)); });}
public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    myStage.act(Gdx.graphics.getDeltaTime());
     myStage.draw(); }
public void resize(int width, int height) {}
public void pause(){}
public void resume(){}
public void hide(){}
public void dispose(){}}}

還有我的下一個屏幕課程代碼

 public class Third implements Screen{
private Game third;
public Third(Game third){
    this.third=third;}
public Third(){}
// your code
Stage myStage=new Stage(new ScreenViewport());
Group myGroup=new Group();
Image thirdButton=new Image(new Texture(Gdx.files.internal("image.png")));
public void show() {
    myGroup.addActor(thirdButton);
    thirdButton.addListener(new InputListener(){
        third.setScreen(new Third(third));});}
public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    myStage.act(Gdx.graphics.getDeltaTime());
    myStage.draw();}
public void resize(int width, int height) {    }
public void pause(){}
public void resume(){}
public void hide(){}
public void dispose(){}}}

我知道了,伙計們。 在我以前的項目中,我在getInstance()之外聲明了instance字段。 像這樣 :

    public static GameClass instance = new GameClass();

    public static GameClass getInstance(){
          return instance;
}

但是我仍然需要您的幫助。 我不知道這件小事不會讓我切換屏幕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM