2016-05-26 20 views
0

Ich habe Probleme mit der richtigen Verwendung der AssetManager-Klasse von libGDX. Soweit ich weiß, sollten Sie niemals eine statische Instanz eines AssetManagers erstellen. Die von den Leuten vorgeschlagene Alternative bestand darin, die AssetManager-Referenz an jede einzelne Klasse weiterzuleiten, die sie verwendet. Ich frage mich, ob das, was ich unten vorgeschlagen habe, eine andere sichere Alternative ist.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; 
    } 
} 

ich einen Assetmanager oder ein Vermögen Klasse übergeben zu müssen, um wirklich will nicht auf jede einzelne Klasse im Spiel, so versuche ich, eine Lösung, um herauszufinden, die eine Art von statischer Referenzierung erlaubt. Ist das sicher?

+0

Wie viele Klassen benötigen Zugriff auf Ihre Ressourcen und warum? Es klingt, als ob Sie versuchen, das falsche Problem zu lösen. – Xoppa

+0

Ich würde viele denken. Jede Entität (Mensch, Zombie, Explosion) muss auf die Klasse no verweisen? – grimrader22

+1

Sie sollten in einigen Klassen nur direkten Zugriff auf Ihre Assets benötigen. Ihre Entitäten sollten nur eine Skin oder Atlas oder Regionen oder was immer Sie bevorzugen, aber sicherlich nicht für den Zugriff auf Ihren AssetManager verantwortlich sein sollte. Vielleicht möchten Sie Ihren Ansatz überdenken. Machen Sie keine Spielobjekte für den Zugriff auf Assets verantwortlich, sie sollten sich nicht darum kümmern. – Xoppa

Antwort

0

Ich glaube, Sie zu viel Sorgen :-) Die statische Instanz ursprünglich vorgeschlagen wird für Ihre Zwecke vollkommen ausreichend und zweckmäßig sein:

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

public static AssetManager getAssets() { 
    return assets; 
} 

Die einzige Falle für junge Spieler zu vermeiden, wenn Sie ein Android-Pause App: Im Lebenslauf laden Sie einfach den AssetManager und seine Assets neu, bevor Sie fortfahren. Mach dir keine Sorgen über Semantik - wenn es für dich funktioniert, dann ist es in Ordnung. Glückliche Tage :-).

+0

Also in Haupt 'Spiel' Klasse onResume Methode sollte ich nur die Assets neu laden? Ist das der richtige Ort dafür? – grimrader22

+0

Leider nein, dass man selbst auf der Desktop-Version aufgerufen wird, wo es unnötig ist. Überschreibe onResume stattdessen in deinem AndroidLauncher. – WonderfulWorld