我有一个大问题。我从ApplicationAdapter扩展了同一类MyGdxGame编写了整个游戏。如何制作主菜单?这样,当打开游戏时,会打开主菜单,按下哪个按钮会打开游戏本身(MyGdxGame)?告诉我怎么做(创建什么,更改什么)

最佳答案

最好具有较高的内聚性,但是当您在一个类中进行编码时,内聚性会变得很低。

使用ScreenGame类来实现多个屏幕,例如MainScreenGameScreenLevelScreen ...

但是,如果您不想在MyGdxGame类中的其他屏幕上使用该标志,则可以使用。

public enum GameScreen{
    MENU_SCREEN, GAME_SCREEN, LEVELSCREEN;
}


renderMyGdxGame方法中

public GameScreen currentScreen=GameScreen.MENU_SCREEN;

@Override
public void render() {

    Gdx.gl.glClearColor(1,1,1,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    if(currentScreen==GameScreen.MENU_SCREEN){

        //render objects for Menu Screen

    }else if(currentScreen==GameScreen.GAME_SCREEN){

        //render objects for Game Screen
    }
}


当您想在其他屏幕上移动时,更改currentScreen的值。

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {

    if(currentScreen==GameScreen.MENU_SCREEN){

        //detect button of MenuScreen by bounds or any other way
        if(check in bound){
            currentScreen==GameScreen.GAME_SCREEN;
        }

    }else if(currentScreen==GameScreen.GAME_SCREEN){

        // for Game Screen
    }
    return false;
}


编辑

Pelocho建议在枚举内使用抽象方法。

public enum GameScreen{
        MENU_SCREEN{

            @Override
            public void render(MyGdxGame gdxGame) {

            }
        }, GAME_SCREEN{

            @Override
            public void render(MyGdxGame gdxGame) {

            }

        }, LEVELSCREEN{

            @Override
            public void render(MyGdxGame gdxGame) {

            }
        };

        public abstract void render(MyGdxGame gdxGame);
    }


renderMyGdxGame方法内部

@Override
public void render() {

    Gdx.gl.glClearColor(1,1,1,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    currentScreen.render(this);
}

09-04 21:11