2017-02-01 9 views
-1

Недавно я добавил класс AssetManager в свою игру LibGDX, но я не могу заставить его работать.LibGDX AssetManager ничего не скачивает

Вот мой AssetManager класс:

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(); 
     } 
     } 

И это мой класс Menu:

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(); 
} 

}

Когда Я запускаю эмулятор, он просто показывает черный экран, а затем вся моя программа падает! Что я делаю не так?

+0

показать отчет о сбоях? – Aryan

+0

вы не используете/получаете данные из созданного вами AssetManger. – Aryan

+0

Также мне нужен код вашего государственного класса? – Aryan

ответ

0

Вы только очередями элементы

в AssetManager.load() методы только добавляет «загружаемый» ресурс к нему, но фактически не загружает его. Для этого вам необходимо позвонить AssetManager.update()

Затем он загружает ваши ресурсы, загружаясь один за другим для каждого звонка до 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() возвращает ложь.

Обратите внимание, что при загрузке частота кадров очень низкая, так как в GL-поток необходимо загрузить материал, чтобы иметь правильный доступ к контексту GL. Но во время начального экрана загрузки это не имеет значения, если есть панель загрузки, поэтому пользователь не думает, что игра застряла.

 Смежные вопросы

  • Нет связанных вопросов^_^