【问题标题】:Libgdx, TextureAtlas(.pack) via AssetManagerLibgdx、TextureAtlas(.pack) 通过 AssetManager
【发布时间】:2014-09-16 07:39:11
【问题描述】:

我最初是直接从资产文件夹加载 TextureAtlas,但是 游戏变得非常迟钝,因为我必须调用 TextureAtlas 的每个区域来获取要在动画中使用的帧(libgdx 声明使用 findregion 作为 TextureAtlas 是 SLOW=lag)。所以我决定使用assetloader来最小化延迟,但问题是 我找不到通过 AssetManager 加载 TextureAtlas (.pack) 的方法。我不断收到

com.badlogic.gdx.utils.GdxRunTimeException:资产未加载:enemytest.pack

我也一直在尝试使用其他加载器,但效果不佳..我找不到任何资源,所以我需要帮助 :( 提前谢谢你!

在我的资产文件夹中,我有“enemytest.png”和“enemytest.pack”文件。

这是一个游戏类(扩展游戏)

public class MyGdxGame extends Game {

    private TextureAtlas enemy;
    AssetManager manager;
    FileHandleResolver resolver = new InternalFileHandleResolver();

    @Override
    public void create () {

        manager = new AssetManager();
        manager.setLoader(TextureAtlas.class, new TextureAtlasLoader(new InternalFileHandleResolver()));
        load();

        setScreen(new GameScreen());
    }
    @Override
    public void render(){
        if(manager.update()){
            }

    }
    private void load(){

        manager.load("enemytest.pack", TextureAtlas.class);
        manager.finishLoading();
    }
}

这是 GameScreen 类..

public class GameScreen implements Screen{

    private GameStage stage;
    public Texture bg;

    public GameScreen() {
        stage = new GameStage();
    }
    @Override
    public void render(float delta) {
         //Clear the screen

        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
                //Update the stage
        stage.act(delta);
        stage.draw();

    }

这是我想从 AssetManager 获取 TextureAtlas 图像的地方。

public class Enemy extends GameActor{

    private Animation animation;
    private float stateTime;
    AssetManager manager = new AssetManager();
    public Enemy(Body body) {
        super(body);
        TextureAtlas textureAtlas = manager.get("enemytest.pack", TextureAtlas.class);
        TextureRegion[] animationFrames = new TextureRegion[getUserData().getTextureRegions().length];

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    其实

    我找到了解决办法。

    我发现使用资产管理器是不必要的。滞后的问题是由于

    对 TextureAtlas 和 Animation 使用 1024px x 1024px 的图像。

    我不得不降低它的分辨率。发现使用 TextureAtlas、findRegion 和 Animation

    毕竟效率很低。

    通过assetmanager单独加载图像似乎是更好的动画解决方案。

    当我说到重点时,我会发布另一个答案。

    【讨论】:

    • 你确定吗?必须重新绑定新纹理再好不过了。您似乎将异步加载过程 (assetmanager) 与 atlas/region 方法混淆了,该方法将所有纹理组合在一个纹理中,从而仅导致一个 openGL 绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多