2015-04-03 3 views
2

Okey Im просто борется с AssetManager в libgdx. Я следил за каждым учебным курсом, читал каждый википедия, но я не могу заставить его работать.Libgdx: AssetManager не загружает активы

класс активов:

public class Assets { 

private static final AssetManager manager = new AssetManager(); 
public static final String background = "data/lawn.png"; 
public static void load() { 

    manager.load(background, Texture.class); 

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

public static boolean update() { 
    return manager.update(); 
} 

Основной класс:

public class TombStone extends Game implements Screen { 
@Override 
public void create() { 

    Assets.manager.update(); 



} 

И я называю свои текстуры, как это в классе Screen:

public class StoneScreen implements Screen{ 
public Texture texture; 
public StoneScreen(TombStone gam){ 
loadStandard(); 
} 
public void loadStandard() { 
texture= Assets.manager.get(Assets.background, Texture.class); 
} 

Так что, когда я запустить приложение его сбой перед показом чего-либо, дающего мне: "FATAL EXCEPTION: GLThread 32182" "Asset not loade d: активы/данные/lawn.png»

+0

Как правило, вам не нужно включать 'assets /' в качестве части пути. Он хочет путь * relative * к каталогу активов. И не делайте ссылку на AssetManager статичной, иначе у вас будут утечки памяти и поврежденные текстуры. – Tenfour04

+0

Я не согласен с этим. У меня есть статический AssetManager во всех моих играх, и он работает очень хорошо. Пока вы правильно реализуете методы жизненного цикла и выполняете 'Assets.manager.dispose()' в соответствующие моменты времени, это не вызовет никаких проблем. Кроме того, это очень удобно! – noone

ответ

4

Там так много плохого кода ...

public class Assets { 

public static final AssetManager manager = new AssetManager(); // 1) 
public static final String background = "assets/data/lawn.png"; // 2) 
public static void load() { 

    manager.load(background, Texture.class); 
    manager.get(background, Texture.class); // 3) 
} 
public static void dispose()  { 
    manager.dispose(); 
} 

public static boolean update() { 
    return manager.update(); 
} 

public class TombStone extends Game implements Screen { // 4) 
@Override 
public void render() { 
    //assets.manager.update(); 
    Assets.load(); // 5) 
    Assets.manager.update(); 
    super.render(); 
} 

1) Ваш менеджер public, но вы до сих пор предлагают другие методы, чтобы манипулировать его (например, обновлять и распоряжаться). Сделайте это частным или удалите методы и непосредственно работайте с Assets.manager.

2) Активы относятся к каталогу assets. Вот почему это должно быть data/lawn.png.

3) Вот почему вы получаете исключение. AssetManager.load() просто отмечает что-то загружаемое, но не загружает его еще раз. Это то, что либо AssetManager.update() (асинхронный), либо AssetManager.finishLoading() (синхронно). Если вы попытаетесь использовать AssetManager.get() до фактически Загрузите его, вы получите это исключение. Просто удалите эту строку.

4) Не имеет смысла удлинять GameИ реализация Screen. Сделайте только один из них за раз. В игре есть экраны, но это не сам экран.

5) Вы отмечаете, что ваши активы загружаются снова и снова. render() называется каждый кадр. Переместите Assets.load() в метод Screen.show(), который выполняется только один раз.

+0

Спасибо за указание на эту штуку. Отсортированы. Но проблема все еще остается. Есть ли что-то еще, что может быть неправильно? – Benni

+0

Вы все еще получаете это исключение? Обновите код до его текущего состояния. – noone

+0

Yepp. Обновлен код – Benni

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