在一个类MyGdxGame中写了整个游戏。我如何主菜单? libgdx

时间:2017-05-22 04:49:47

标签: java android libgdx

我有一个大问题。我在同一个(一个)类中编写了整个游戏MyGdxGame从ApplicationAdapter扩展。如何制作主菜单?因此,当打开游戏时,主菜单打开,按下1个按钮,打开游戏本身(MyGdxGame)?告诉我该怎么做(创造什么,改变什么)

2 个答案:

答案 0 :(得分:1)

实现高凝聚力会更好,但是当你在一个类中编码时,凝聚力会变得非常低。

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

但是,如果您不想在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一样调用第一个屏幕。对于更改屏幕,您有几种选择。

  • 将Game对象与屏幕一起传递,以便您可以setScreen(new MenuScreen())
  • 使用game.setScreen(..)方法设置某种屏幕管理器来更改屏幕。
  • public static可以投入到游戏中。这样您就可以在LibGDX应用程序的任何位置更改屏幕。 Gdx.app.getApplicationListener

如果您感到害怕,您将破坏功能,在当前状态下备份您的游戏。将代码从大类抽象到新的小类是每个程序员的一项重要任务,因此这将是一个很好的实践。如果您觉得任何一点代码应该属于另一个/新类,请随意这样做。有许多方法可以做到并保持代码的可读性和可理解性是您的首要任务。