我有一个大问题。我在同一个(一个)类中编写了整个游戏MyGdxGame从ApplicationAdapter扩展。如何制作主菜单?因此,当打开游戏时,主菜单打开,按下1个按钮,打开游戏本身(MyGdxGame)?告诉我该怎么做(创造什么,改变什么)
答案 0 :(得分:1)
实现高凝聚力会更好,但是当你在一个类中编码时,凝聚力会变得非常低。
使用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);
}
答案 1 :(得分:0)
你应该正确地执行它而不是黑客入侵菜单。如果你查看Screen类,它具有与ApplicationAdapter大致相同的方法(显示,渲染,调整大小,处置,隐藏,暂停,恢复)。如果您要创建一个新类并让它实现@PostAuthorize
,您可以开始从主类剪切/粘贴到此屏幕类。如果您在Screen
方法中有某些内容,则将其放在Create
方法或构造函数中。然后,为主菜单,选项,信用等创建另一个Show
。
主要课程Screen
是否从MyGdxGame
延伸而不是Game
删除除ApplicationAdapter
方法之外的所有方法。在创建方法中,您可以加载资源并像第create
一样调用第一个屏幕。对于更改屏幕,您有几种选择。
setScreen(new MenuScreen())
game.setScreen(..)
方法设置某种屏幕管理器来更改屏幕。public static
可以投入到游戏中。这样您就可以在LibGDX应用程序的任何位置更改屏幕。 Gdx.app.getApplicationListener
如果您感到害怕,您将破坏功能,在当前状态下备份您的游戏。将代码从大类抽象到新的小类是每个程序员的一项重要任务,因此这将是一个很好的实践。如果您觉得任何一点代码应该属于另一个/新类,请随意这样做。有许多方法可以做到并保持代码的可读性和可理解性是您的首要任务。