在我的播放屏幕中有很多纹理Texture,字体FreeType,图像scene2d.Image和按钮scene2d.Button.所以,当我设置播放屏幕时
((Game) Gdx.app.getApplicationListener()).setScreen(new PlayScreen());
Run Code Online (Sandbox Code Playgroud)
打开屏幕需要几秒钟.
我想快速打开它,实现这一目标的最佳方法是什么?
我是否创建了一个新类来创建所有资源,然后将它们加载到屏幕上?
Mad*_*nyo 19
你应该使用AssetManager.经理允许您在开始游戏时加载资产.它还具有向您显示已加载资产的百分比的功能,以便您可以显示进度条.有很多资源可以告诉你如何使用AssetManager.有些人会向您展示静态的示例,AssetManager但不鼓励使用badlogic,这会导致黑色图像.
您应该创建一个类,用于存储要与管理器一起处理的资产,管理器将异步加载它.我喜欢AssetDescriptor使用静态描述符来查找我的纹理.但是你有很多不同的方法可以使用AssetManager.您可以像这样向管理器添加一些东西,manager.load("images/sometexture.png, Texture.class);并通过这样的manager.get("images/sometexture.png");方式查找它,通过它的路径简单地查找纹理.
public class Assets {
public AssetManager manager = new AssetManager();
public static final AssetDescriptor<Texture> someTexture =
new AssetDescriptor<Texture>("images/sometexture.png", Texture.class);
public static final AssetDescriptor<TextureAtlas> uiAtlas =
new AssetDescriptor<TextureAtlas>("ui/uiskin.pack", TextureAtlas.class);
public static final AssetDescriptor<Skin> uiSkin =
new AssetDescriptor<Skin>("ui/uiskin.json", Skin.class,
new SkinLoader.SkinParameter("ui/uiskin.pack"));
public void load()
{
manager.load(someTexture);
manager.load(uiAtlas);
manager.load(uiSkin);
}
public void dispose()
{
manager.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
在入口点我创建了一个带徽标的启动画面,然后我开始加载我的资产.以下是加载资产的方式.
public class MyGame extends Game
{
public void create()
{
Assets assets = new Assets();
assets.manager.load(); //starts loading assets
//option 1
assets.manager.finishLoading(); //Continues when done loading.
//it won't continue until all assets are finished loading.
}
//option 2
public void update()
{
//draw something nice to look at
if (manager.update())
{
//Assets have finished loading, change screen maybe?
setScreen(new MenuScreen(assets)); //your screen should take a Assets object in it's constructor.
}
}
}
Run Code Online (Sandbox Code Playgroud)
也许您可以像平常一样加载菜单资源,让资产管理器在用户进入菜单时工作.那取决于你.这是您加载资产的方式.
someTexture = assets.manager.get(Assets.someTexture);
atlas = assets.manager.get(Assets.uiAtlas);
skin = assets.manager.get(Assets.uiSkin);
Run Code Online (Sandbox Code Playgroud)
同样的规则适用于查找地图册中的区域,最好是在地图册中的每个区域一次执行此操作.您必须将Assets对象传递到需要加载资源的任何位置.它使它成为公共静态的诱人但它可能导致问题.
| 归档时间: |
|
| 查看次数: |
6015 次 |
| 最近记录: |