Libgdx,切换屏幕时为什么要使用构造函数?

时间:2014-08-25 18:58:52

标签: memory-management libgdx

我是libgdx的初学者,并且想知道在切换屏幕时你需要使用构造函数的情况(示例会有所帮助)。是为了节省记忆吗?另外,最好是在扩展游戏的主类中创建所有屏幕的实例吗?

以下是https://code.google.com/p/libgdx-users/wiki/ScreenAndGameClasses的实例示例:

public class MyGame extends Game {


            MainMenuScreen mainMenuScreen;
            AnotherScreen anotherScreen;


           @Override
            public void create() {
                    mainMenuScreen = new MainMenuScreen(this);
                    anotherScreen = new AnotherScreen(this);
                    setScreen(mainMenuScreen);              
            }
     }

构造函数在下一个类中:

 public class MainMenuScreen implements Screen {


           MyGame game; // Note it's "MyGame" not "Game"


           // constructor to keep a reference to the main Game class
            public MainMenuScreen(MyGame game){
                    this.game = game;
            }
    ...

3 个答案:

答案 0 :(得分:1)

您应该避免在 create()方法中在Game类中创建所有屏幕(您将同时分配大量内存并且点不清楚)。什么时候需要它,一次只创建一个屏幕。所以例如你点击菜单中的新游戏按钮,然后你调用game.setScreen(new NextScreen(this)); 您不必使用Game参数创建构造函数 - 但您不会引用主Game类。参考主游戏类有利于更改屏幕,方法 setScreen(屏幕)

答案 1 :(得分:0)

我更喜欢使用singleton

这样的东西
public class MyGame extends Game {

    private static MyGame myGame;

    public static MyGame getInstance() {
        if (myGame == null) {
            myGame = new MyGame();
        }
        return myGame;
    }

    @Override
    public void create() {
        setScreen(new MainMenuScreen();
    }
}

桌面主类的示例

public class Main {
    public static void main(String[] args) {
        LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
        cfg.width = 800;
        cfg.height = 480;
        new LwjglApplication(MyGame.getInstance(), cfg);
    }
}

现在,只要您需要更改屏幕,请使用MyGame.getInstance()。setScreen(new ScreenName());

答案 2 :(得分:0)

你需要构造函数,因为你改变了一个不扩展Game类的屏幕,你需要调用setScreen();由于你将游戏类传递给构造函数,你可以使用它来回到你所在的屏幕(或另一个屏幕)而不创建另一个扩展游戏的类