我开始在我的LibGDX游戏中使用scene2D来制作更专业的外观登录/注册菜单。唯一的问题是切换到这些菜单对菜单导航(3-5秒)非常长。LibGDX加载scene2D小部件第一次非常慢,需要建议
我想知道是否有更好的方法来加载它们,比如在游戏的初始加载屏幕中。事情是,一旦菜单中的一个被加载,第二次加载非常快。
我知道肯定它的create
方法我的屏幕需要这么长时间。这里是它正在加载的所有内容:
public void create(){
stage = new Stage(new StretchViewport(1920, 1080));
Gdx.input.setInputProcessor(stage);
loginBox = new Image(Textures.Gui.BOX);
loginBox.setSize(650, 1000);
loginBox.setPosition(635, 40);
stage.addActor(loginBox);
loginLBL = new Label("Login", Archipelo.SKIN, "basic-large-font", Color.LIGHT_GRAY);
loginLBL.setPosition(880, 955);
stage.addActor(loginLBL);
selectionHighlight = new Image(Textures.Gui.SELECTION_HIGHLIGHT);
selectionHighlight.setSize(540, 140);
stage.addActor(selectionHighlight);
usernameTF = new TextField("", Archipelo.SKIN);
usernameTF.setMaxLength(24);
usernameTF.setPosition(usernameTFx, usernameTFy);
usernameTF.setSize(400, 60);
stage.addActor(usernameTF);
passwordTF = new TextField("", Archipelo.SKIN);
passwordTF.setPasswordMode(true);
passwordTF.setPasswordCharacter('•');
passwordTF.setPosition(passwordTFx, passwordTFy);
passwordTF.setSize(400, 60);
stage.addActor(passwordTF);
usernameLBL = new Label("Username", Archipelo.SKIN, "basic-medium-font", new Color(1, 1, 1, 0.5f));
usernameLBL.setPosition(usernameTFx + 10, usernameTFy + 5);
stage.addActor(usernameLBL);
passwordLBL = new Label("Password", Archipelo.SKIN, "basic-medium-font", new Color(1, 1, 1, 0.5f));
passwordLBL.setPosition(passwordTFx + 10, passwordTFy + 5);
stage.addActor(passwordLBL);
remember = new CheckBox(" Remember Login?", Archipelo.SKIN);
remember.setPosition(rememberX, rememberY);
remember.getCells().get(0).size(30, 30);
stage.addActor(remember);
errorLBL = new Label("", Archipelo.SKIN, "basic-small-font", Color.RED);
errorLBL.setPosition(750, 650);
errorLBL.setWrap(true);
errorLBL.setBounds(750, 500, 400, 250);
stage.addActor(errorLBL);
continueLBL = new Label("Continue", Archipelo.SKIN, "basic-big-font", Color.WHITE);
continueLBL.setPosition(875, 100);
stage.addActor(continueLBL);
}
另外,我在游戏初始加载屏幕之前加载了uiskin文件。 Archipelo.SKIN
是指那个uiskin的静态变量。我还想提到我的屏幕类是自定义的,每当调用create()
时,都是因为正在创建一个新的屏幕实例。
我没有得到的是为什么它需要这么长时间才能第一次创建屏幕,然后每隔一段时间,它仍然会经历相同的过程,除了它更快。有没有办法让第一次更快?
在此先感谢。如果你需要更多的信息,所有的手段问。
定义'Textures.Gui.BOX'的行是什么样的?也许你无意中做了一些延迟加载纹理。确保您的纹理在用户处于某个加载屏幕时提前加载。 – Tenfour04 2014-11-20 18:03:40
这是一个650x1000像素的纹理。我试图指出小部件需要这么长时间才能加载,而我无法加载。有时它会是一个文本框和其他时间,它是图像,甚至是标签。这是相当随机的 – vedi0boy 2014-11-20 18:05:34
仍然不清楚给我。你把它定义为'public static Texture BOX;'并且用一个方法加载它,或者你将它定义为'public static Texture BOX = new Texture(“texturefile.png”);'或者别的什么东西? – Tenfour04 2014-11-20 18:16:53