2016-04-23 9 views
0

Ich implementiere derzeit den Inhaltstyp Level, der einen Inhalt auf Spielniveau darstellen soll (am wichtigsten, beziehen Sie sich auf separat gespeicherte Texturen). Daten auf Eingangsebene enthalten den vollständigen Pfad zu Quelltexturressourcen.XNA: Ermitteln des Inhaltsnamens aus dem Quelldateipfad

Problem: Wie ermittelt man die resultierenden "Namen", die ich in den kompilierten Level-Inhalt schreiben kann? Die Texturen sollen wiederverwendet werden, also wäre es eine schlechte Idee, sie in den Level-Inhalt zu brennen (Platzverschwendung). Es ist unmöglich, die Namen während der Inhaltserstellung anzugeben (z. B. im Level-Editor).

Um ein Beispiel zu geben: Quelldatei Levels/Level01.level bezieht sich auf Textures/Granite.png und Textures/Dirt.png mit ihren vollständigen Pfadnamen. Ich möchte und Textures/Dirt von diesen Daten zur Kompilierzeit ableiten.

Antwort

0

Die korrekte Lösung war die Verwendung der (nicht so gut dokumentierten) ExternalReference<T> Klasse anstelle von einfachen String-Namen.

Auf der Seite des Schreibers enthält das Inhaltsobjekt der Ebene (oder sogar List<ExternalReference<TextureContent>>) Instanz. Wenn dies serialisiert wird (über ContentWriter), sorgt dies dafür, dass die Referenz richtig eingestellt wird.

Die Seite des Lesers wird zu einem einfachen Anruf, z. B. ContentReader.ReadObject<>, vereinfacht.

public sealed class LocationReader : ContentTypeReader<Location> 
{ 
    protected override Location Read(ContentReader input, Location existingInstance) 
    { 
     List<Texture2D> textures = input.ReadObject<List<Texture2D>>(); 
    } 
} 

HINWEIS: Achten Sie darauf, richtig die GetRuntimeType() Methode in Ihrem Schriftsteller Klassen außer Kraft zu setzen; das war die Quelle von Oddball ReflectionReader<T> Probleme für mich.

Verwandte Themen