LibGDX AssetManager不加载任何内容 [英] LibGDX AssetManager not loading anything

查看:102
本文介绍了LibGDX AssetManager不加载任何内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近在我的LibGDX游戏中添加了AssetManager类,但是我似乎无法使其正常工作.

I have recently added an AssetManager class to my LibGDX game, but I can't seem to get it to work.

这是我的AssetManager类:

Here's my AssetManager class:

public class AssetLoader {

    public AssetManager manager = new AssetManager();

    public void loadAssets(){
        manager.load("antoanimation.png", Texture.class);
        manager.load("antoButton.png", Texture.class);
        manager.load("bg2.png", Texture.class);
        manager.load("bottomtube2.png", Texture.class);
        manager.load("clickme.png", Texture.class);
        manager.load("diamtermopan.png", Texture.class);
        manager.load("gameover.png", Texture.class);
        manager.load("grass.png", Texture.class);
        manager.load("logo.png", Texture.class);
        manager.load("menubutton.png", Texture.class);
        manager.load("pausebutton.png", Texture.class);
        manager.load("pausemenu.png", Texture.class);
        manager.load("play.png", Texture.class);
        manager.load("restartbutton.png", Texture.class);
        manager.load("return.png", Texture.class);
        manager.load("selected.png", Texture.class);
        manager.load("shopbutton.png", Texture.class);
        manager.load("shopLayout.png", Texture.class);
        manager.load("termopanButton.png", Texture.class);
        manager.load("vladanimation.png", Texture.class);
        manager.load("vladButton.png", Texture.class);
    }



    public void dispose(){
        manager.dispose();
    }

这是我的主要游戏课:

    public class FlappyPela extends ApplicationAdapter {
        public static SpriteBatch batch;
        private GameStateManager gsm;
        private AssetLoader assets;


        @Override
        public void create () {
            batch = new SpriteBatch();
            gsm = new GameStateManager();
            assets = new AssetLoader();
            assets.loadAssets();
            assets.manager.finishLoading();
            gsm.push(new MenuState(gsm));
        }



        @Override
        public void render() {
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
            super.render();




        }
        @Override
        public void dispose() {
            super.dispose();
            assets.manager.dispose();
            batch.dispose();
        }
        }

这是我的菜单类:

public class MenuState extends State {
    private Texture background;
    private Sprite logo;
    private Sprite clickme;
    PlayButton play;
    Viewport viewport;



public MenuState(GameStateManager gsm) {
    super(gsm);
    background = new Texture("bg2.png");
    play = new PlayButton();
    logo = new Sprite(new Texture(Gdx.files.internal("logo.png")));
    clickme = new Sprite(new Texture(Gdx.files.internal("clickme.png")));
    viewport = new StretchViewport(720, 1280, cam);
    viewport.apply();
    cam.position.set(cam.viewportWidth / 2, cam.viewportHeight / 2,0);
    logo.setSize(620, cam.viewportHeight / 2 - 200);
    logo.setPosition(cam.viewportWidth / 2 - logo.getWidth() / 2 , cam.viewportHeight / 2 + 100);
    clickme.setSize(460, 450);
    clickme.setPosition(225, 125);

}

@Override
public void handleInput() {
    if(play.isPressed()){
        gsm.set(new PlayState(gsm));
    }

}

@Override
public void update(float dt) {
    handleInput();
    cam.update();

}
@Override
public void resize(int width, int height){
     viewport.update(width, height);
     cam.position.set(cam.viewportWidth / 2, cam.viewportHeight / 2,0);
}


@Override
public void render(SpriteBatch sb) {
    cam.update();
    sb.setProjectionMatrix(cam.combined);
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    sb.begin();
    sb.draw(background, 0, 0, cam.viewportWidth, cam.viewportHeight);
    logo.draw(sb);
    clickme.draw(sb);
    sb.end();
    play.act();
    play.draw();

}
@Override
public void dispose() {
    background.dispose();
    logo.getTexture().dispose();
    clickme.getTexture().dispose();
}

}

启动模拟器时,它仅显示黑屏,然后我的整个程序崩溃!我在做什么错了?

When I start the emulator, it just shows a black screen, and then my entire program crashes! What am I doing wrong?

推荐答案

您只是在排队元素

AssetManager.load()方法仅向其添加可加载"资源,但实际上并未加载.为此,您需要致电AssetManager.update()

You are only queuing elements

the AssetManager.load() methods only adds a "loadable" resource to it, but doesn't actually load it. To do that, you need to call AssetManager.update()

然后它会加载您的资源,每次调用update()时都将一个一个地加载.

Then it loads your resources, be loading one by one for each call to update().

尝试一下:

public void render() {
      if(manager.update()) {
         // we are done loading, let's move to another screen!
      }

      // display loading information
      float progress = manager.getProgress()
      ... left to the renderer, display loading bar or somthing ...
}

然后,当manager.update()返回false时,您可以显示加载栏指示器或其他内容.

You could then display a loading bar indicator or something while manager.update() returns false.

请注意,在加载过程中帧速率非常低,因为需要将内容加载到GL线程中才能正确访问GL上下文.但是在您的初始加载屏幕上,只要有加载栏,这都没有关系,因此用户不会认为游戏卡住了.

Note that the framerate is very low during loading, as stuff needs be loaded in the GL Thread in order to have correct access to the GL context. But during your initial loading screen, this shouldn't matter, as long as there is a loading bar, so the user doesn't think the game is stuck.

这篇关于LibGDX AssetManager不加载任何内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆