我有一个大问题。我从ApplicationAdapter扩展了同一类MyGdxGame编写了整个游戏。如何制作主菜单?这样,当打开游戏时,会打开主菜单,按下哪个按钮会打开游戏本身(MyGdxGame)?告诉我怎么做(创建什么,更改什么)
最佳答案
最好具有较高的内聚性,但是当您在一个类中进行编码时,内聚性会变得很低。
使用Screen
和Game
类来实现多个屏幕,例如MainScreen
,GameScreen
,LevelScreen
...
但是,如果您不想在MyGdxGame
类中的其他屏幕上使用该标志,则可以使用。
public enum GameScreen{
MENU_SCREEN, GAME_SCREEN, LEVELSCREEN;
}
在
render
的MyGdxGame
方法中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);
}
在
render
的MyGdxGame
方法内部@Override
public void render() {
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
currentScreen.render(this);
}