Bisher habe ich in meinem Rhythmus-Spiel die Content-Pipeline von XNA zum Laden statischer Ressourcen in meine App (Videos, Soundeffekte usw.) verwendet. Später möchte ich den Benutzern jedoch erlauben, ihre eigenen Themen zu erstellen und benutzerdefinierte Notizdiagramme für die Songs zu erstellen, die sie spielen möchten. Gibt es eine Möglichkeit, beispielsweise ein Texture2D- oder Video-Objekt von der Festplatte zu laden, ohne die Inhaltspipeline zu verwenden, wenn ein Dateipfad zur Ressource angegeben wird?
BEARBEITEN : Obwohl dies XNA ist, ziele ich nur auf Windows ab (keine Zune, WP7 oder Xbox 360).
Es ist durchaus möglich, den Inhaltserstellungsprozess zur Laufzeit mit MSBuild auszuführen. Das folgende Beispiel zeigt Ihnen im Grunde, wie es geht: http://creators.xna.com/en-GB/sample/winforms_series2 . In diesem Beispiel werden Windows-Formulare verwendet, aber nichts hindert Sie daran, dasselbe in einem tatsächlichen Spiel zu tun.
Das große Problem besteht darin, dass die Content-Pipeline-Assembly (in der sich alle zum Erstellen erforderlichen Prozessoren / Importeure / Build-Aufgaben befinden) nicht in der weiterverteilbaren XNA Framework-Version enthalten ist. Dies bedeutet, dass Ihre Benutzer zum Erstellen und / oder Laden von benutzerdefinierten Inhalten die Version von XNA Game Studio installieren müssen, mit der Ihr Spiel erstellt wurde. Sie müssten niemals die darin enthaltene Software verwenden, aber sie müssten sie installieren. Abhängig von Ihrem Spiel und davon, von wem Sie erwarten, dass er benutzerdefinierte Inhalte erstellt und verwendet, kann dies akzeptabel sein oder auch nicht.
quelle
Einige der Inhaltsprozessoren stellen Klassen bereit, die einen Großteil des schweren Hebens ausführen, z. B. einen Stream aufnehmen und ein Zwischenobjekt erzeugen (wie die Daten, die zum Erstellen eines Netzes erforderlich sind, jedoch kein tatsächliches Netzobjekt). Möglicherweise können Sie eine zusätzliche Verarbeitung durchführen, um das Zwischenobjekt in das endgültige Objekt umzuwandeln, das Sie verwenden möchten. Einige dieser Klassen spucken möglicherweise sogar das endgültige Objekt für Sie aus. Es variiert je nach Art des Inhalts. Ich schlage vor, die Inhaltsprozessoren nach den relevanten Inhaltstypen zu durchsuchen und festzustellen, ob nützliche Informationen verfügbar sind. Möglicherweise müssen Sie einige Teile selbst neu schreiben (Reflector ist Ihr Freund), aber es könnte sich lohnen, wenn Sie wirklich keine "vorkompilierten" Assets verwenden möchten.
quelle