最好的方法是什么?
1)制定方法:
Assets.loadAll()
加载游戏中使用的所有纹理,并在splashScreen中调用此方法(因此在所有活动生命中只调用一次)
OR
2)为每个屏幕制作一个方法(即Assets.loadMainMenu,Assets.loadGameScreen等等)并在任何屏幕的show()中调用它? (并在hide()中调用Assets.disposeMainMenuAssets,Assets.disposeGameScreenAssets等等。)
注意:2)比第一个慢,但在第一个如果我阻止手机(使用经典的物理按钮)并且在返回应用程序后,纹理消失(如果我按下它不会发生'home'按钮...但如果我锁定手机是....而奇怪的是在libGdx 9.6如果我锁定手机纹理不会消失,但使用libGdx 9.7这附加..)
答案 0 :(得分:1)
如果它是5MB的资产,我说只需在启动画面上加载它们。这样,屏幕切换之间几乎没有“加载”时间。方法1是最好的。
创建一个名为Assets
的类。在这有一个名为“load”的静态方法,如此
公共类资产{
private static Texture tex;
public static TextureRegion tree,cloud1,cloud2,cloud3,rock,platform,playerStanding,
rocket, rocketShadow, moon, star;
public static SpriteAnimation playerMoving;
public static void load(){
tex = new Texture(Gdx.files.internal("data/Graphics.png"));
tex.setFilter(TextureFilter.Linear, TextureFilter.Linear);
tree = new TextureRegion(tex, 0,0,246,226);
cloud1 = new TextureRegion(tex, 246,0,225,92);
cloud2 = new TextureRegion(tex, 358,197,88,84);
cloud3 = new TextureRegion(tex, 0,226,105,64);
rock = new TextureRegion(tex, 246,197,112,90);
platform = new TextureRegion(tex, 246,92,193,105);
tex = new Texture(Gdx.files.internal("data/Graphics2.png"));
tex.setFilter(TextureFilter.Linear, TextureFilter.Linear);
playerMoving = new SpriteAnimation(new TextureRegion(tex,0,0,458,555), 4, 5, 0.01f);
playerStanding = new TextureRegion(tex,0,0,112,110);
tex = new Texture(Gdx.files.internal("data/Graphics3.png"));
tex.setFilter(TextureFilter.Linear, TextureFilter.Linear);
rocket = new TextureRegion(tex,0,218,119,201);
rocketShadow = new TextureRegion(tex,0,0,138,218);
tex = new Texture(Gdx.files.internal("data/Graphics4.png"));
tex.setFilter(TextureFilter.Linear, TextureFilter.Linear);
moon = new TextureRegion(tex,0,0,410,382);
star = new TextureRegion(tex,0,382,123,123);
}
public static void dispose(){
tex.dispose();
}
}
(这只是我游戏的一个例子。名字并不重要,只是方法)
在启动画面上,您只需拨打Assets.load();
即可加载所有资源!
然后你想使用一个资产,你可以通过Assets.whatever
来调用它(这是静态的很好)
希望这有帮助!