【问题标题】:libGDX manager.update() blocking animationslibGDX manager.update() 阻塞动画
【发布时间】:2019-07-27 09:04:14
【问题描述】:

我在我的项目中成功实现了一个 gifdecoder,并为它编写了一个 gifloader 以将它与资产管理器一起使用。我可以在资产管理器中加载 gif,也可以绘制它。但是每次我尝试使用 manager.update() 在我的资产管理器中加载 gif 时,我都无法再绘制动画了,只能绘制非动画纹理。

这是我的代码,希望有人知道

public class Load implements Screen {

private SpriteBatch batch;
private Animation<TextureRegion> loadingAnimation;
private TextureAtlas atlasLoading = new TextureAtlas(Gdx.files.internal("atlas/loadingAnimation.atlas"));
float stateTime;
MainExecute lr;

public FileHandleResolver resolver = new InternalFileHandleResolver();
public AssetManager manager = new AssetManager();
private final Animation animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.NORMAL, Gdx.files.internal("data/loading.gif").read());
public Load(MainExecute lr){
    this.lr = lr;
}
public Texture Bg1;

@Override
public void show() {
    Bg1 = new Texture(Gdx.files.internal("bggamescreen.png"));
    batch = new SpriteBatch();
    manager.setLoader(GIF.class,new Gifloader(resolver));
    manager.load("data/BackgroundAnim.gif",GIF.class);
    stateTime = 0f;
}





@Override
public void render(float delta) {

    if (manager.update())
    {


        lr.setScreen(new MainMenu(lr)); 
    }

    stateTime += delta;
  //  loadingAnimation = new Animation<TextureRegion>(0.5f, atlasLoading.findRegions("loading"),Animation.PlayMode.LOOP);
    TextureRegion currentFrame = (TextureRegion) animation.getKeyFrame(stateTime, true);


    batch.begin();
    batch.draw(Bg1,0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    batch.draw(currentFrame, 0, 0, 200, 200);
    batch.end();







}

@Override
public void resize(int width, int height) {

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {

}

}

【问题讨论】:

    标签: java animation libgdx gif


    【解决方案1】:

    奇怪的代码,你在完成加载之前绘制动画。你需要等待加载你的动画,试试这样。

        if (manager.update())
        {
            loadingAnimation = new Animation<TextureRegion>(0.5f, atlasLoading.findRegions("loading"),Animation.PlayMode.LOOP);
            TextureRegion currentFrame = (TextureRegion) animation.getKeyFrame(stateTime, true);
    
            lr.setScreen(new MainMenu(lr)); 
        }
    

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 2023-03-26
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多