我是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;
}
...
答案 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();由于你将游戏类传递给构造函数,你可以使用它来回到你所在的屏幕(或另一个屏幕)而不创建另一个扩展游戏的类