2016-05-26 7 views
0

У меня возникли проблемы с определением правильного использования класса AssetManager libGDX. Насколько я понимаю, вы никогда не должны создавать статический экземпляр AssetManager. Альтернатива, предложенная людьми, заключалась в том, чтобы передавать ссылку AssetManager на каждый класс, который ее использует. Мне интересно, что то, что я предложил ниже, является другой безопасной альтернативой.LibGDX static AssetManager

public class GdxGame extends Game { 

    private AssetManager assets; 

    ....dispose, create AssetManager etc 


    public static AssetManager getAssets() { 
     return ((GdxGame) Gdx.app.getApplicationListener()).assets; 
    } 
} 

Я действительно не хочу, чтобы пройти AssetManager или класс Assets вокруг каждого класса в игре, так что я пытаюсь выяснить, решение, которое позволяет какой-то статической привязки. Это безопасно?

+0

Сколько классов необходимо иметь доступ к вашим активам и почему? Похоже, вы пытаетесь решить неправильную проблему. – Xoppa

+0

Я думаю много. Любое лицо (человек, зомби, взрыв) должно будет ссылаться на класс нет? – grimrader22

+1

Вам нужен только прямой доступ к вашим активам в нескольких классах. Вашим сущностям необходимо предоставить только кожу или атлас или регионы или что вы предпочитаете, но, конечно же, не должны нести ответственность за доступ к вашему AssetManager. Возможно, вы захотите пересмотреть свой подход. Не делайте игровые объекты ответственными за доступ к активам, им не нужно заботиться об этом. – Xoppa

ответ

0

Я думаю, что ты слишком много :-) статический экземпляр вы предложили первоначально будет вполне достаточно и функциональным для ваших целей:

private static AssetManager assets; 
....dispose, create AssetManager etc 

public static AssetManager getAssets() { 
    return assets; 
} 

Единственная ловушка для молодых игроков, чтобы избежать, когда вы Приостановка Android app: в резюме, просто перезагрузите AssetManager и его активы, прежде чем продолжить. Не беспокойтесь о семантике - если это сработает для вас, тогда все в порядке. Счастливые дни :-).

+0

Итак, в основном режиме 'Game' класса onResume мне нужно просто перезагрузить активы? Это подходящее место для этого? – grimrader22

+0

К сожалению нет, тот будет вызван даже на настольной версии, где это не нужно. Вместо этого перезапустите onResume в AndroidLauncher. – WonderfulWorld