我有一个大问题。我在从 ApplicationAdapter 扩展的同一(一个)类 MyGdxGame 中编写了整个游戏。如何制作主菜单?这样,当打开游戏时,主菜单就会打开,其中 1 个按钮按下后会打开游戏本身(MyGdxGame)?只要告诉我怎么做(创建什么,改变什么)
最佳答案
最好实现高内聚性,但是当您在一个类中编写代码时,内聚性会变得非常低。
使用 Screen
和 Game
类来实现多个屏幕,如您的情况,如 MainScreen
、GameScreen
, LevelScreen
...
但如果您不想实现,请在 MyGdxGame
类中使用不同屏幕的标志。
public enum GameScreen{
MENU_SCREEN, GAME_SCREEN, LEVELSCREEN;
}
在 MyGdxGame
的 render
方法中
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);
}
以及MyGdxGame
的render
方法内部
@Override
public void render() {
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
currentScreen.render(this);
}
关于java - 在一类 MyGdx Game 中编写了整个游戏。我如何制作主菜单? libgdx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44104852/