AssetManager ничего не делает - LibGDX
Мой класс AssetManager:
public class AssetLoader {
public AssetManager manager = new AssetManager();
public void load(){
manager.load("antoanimation.png", Texture.class);
manager.load("antoButton.png", Texture.class);
manager.load("textures/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("textures/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.load();
assets.manager.finishLoading();
assets.manager.get("textures/bg2.png", Texture.class);
assets.manager.get("logo.png", Texture.class);
assets.manager.get("clickme.png", Texture.class);
gsm.push(new MenuState(gsm, assets));
}
@Override
public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
gsm.update(Gdx.graphics.getDeltaTime());
gsm.render(batch);
}
@Override
public void dispose() {
assets.manager.dispose();
batch.dispose();
}
}
Мой класс MenuState:
public class MenuState extends State {
private Texture background;
private Texture logo;
private Texture clickme;
PlayButton play;
Viewport viewport;
AssetLoader assets;
public MenuState(GameStateManager gsm, AssetLoader assets) {
super(gsm, assets);
background = assets.manager.get("textures/bg2.png", Texture.class);
play = new PlayButton();
logo = assets.manager.get("logo.png", Texture.class);
clickme = assets.manager.get("clickme.png", Texture.class);
viewport = new StretchViewport(720, 1280, cam);
viewport.apply();
cam.position.set(cam.viewportWidth / 2, cam.viewportHeight / 2,0);
}
@Override
public void handleInput() {
if(play.isPressed()){
gsm.set(new PlayState(gsm,assets));
}
}
@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);
sb.begin();
sb.draw(background, 0, 0, cam.viewportWidth, cam.viewportHeight);
sb.draw(logo, cam.viewportWidth / 2 - 310 , cam.viewportHeight / 2 + 100, 620, cam.viewportHeight / 2 - 200);
sb.draw(clickme, 225, 125, 460, 450);
sb.end();
play.act();
play.draw();
}
@Override
public void dispose() {
background.dispose();
logo.dispose();
clickme.dispose();
}
}
Когда я запускаю свое приложение, оно должно отображать экран меню после того, как загрузит все свои ресурсы, но оно вообще ничего не рисует! Я не получаю никакой ошибки. Что я могу сделать?
1 ответ
Вы должны вызвать manager.update() в вашей функции рендеринга. AssetManager загружает активы асинхронно.
gameloop() or render()
{
if(mAssetManager.update())
{
// load screen
}
else{
// game
}
}