Je construis un éditeur de jeu pour un jeu XNA que je suis en train de construire qui accepterait JPEG/PNG, et sortirait un fichier XNB contenant du contenu Texture2D.Sérialiser Texture2D par programmation dans XNA
J'ai mes serializers personnalisés pour mon etc personnalisé et je suis creusé tout vers le bas en invoquant ContentCompiler utilisant la réflexion etc, entré dans les vrais morceaux sales, et je CAN fait obtenir cette partie de travail pour mes propres formats. Mais je dois maintenant sérialiser au format Regular2 Texture que XNA sait compiler (dans Visual Studio lors de la construction du projet) et charger (dans le jeu avec la méthode Content.Load la plus utilisée.) Je ne veux pas faire ma propre image Lorsque je tente de compiler un Texture2D, il ne me donne pas d'erreur, il crée le fichier XNB, mais le contenu du fichier n'est pas une image, c'est juste 3-4 Ko de surcharge (que je CROYEZ les autres, les propriétés non-image d'un objet Texture2D)
Voici le code que j'utilise pour la compilation:.
protected void InitializeWriter()
{
Type compilerType = typeof(ContentCompiler);
cc = compilerType.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)[0].Invoke(null) as ContentCompiler;
compileMethod = compilerType.GetMethod("Compile", BindingFlags.NonPublic | BindingFlags.Instance);
}
internal void Write(string objectName, string path, object objectToWrite)
{
if (basePath == null)
{
throw new InvalidOperationException("The base path to write has not been set.");
}
if (cc == null) { InitializeWriter(); }
string fullPath = Path.Combine(basePath, path, objectName + ".xnb");
using (FileStream fs = File.Create(fullPath))
{
compileMethod.Invoke(cc, new object[]{
fs, objectToWrite, TargetPlatform.Windows, GraphicsProfile.Reach, false/*true*/, fullPath, fullPath
});
}
}
J'ai mes propres processeurs de contenu et ce code fonctionne avec eux parfaitement ce. appelle simplement la méthode Compile du ContentCompiler , mais en utilisant Reflection (comme c'est une classe interne).
Je ne comprends pas pourquoi Texture2D sérialise, mais sans les données bitmap réelles.
Merci, Can.
EDIT Désolé, il ne compile pas Texture2D (il se plaint de référence cyclique de mon GraphicsDevice), si je tente de compiler un objet Bitmap, il compile sans erreur, mais ne sérialise pas les données bitmap réelles)
Comment puis-je importer TextureImporter dans mes références de projet, pouvez-vous l'expliquer aussi? Merci ! – icaptan
référence l'assembly XNA Content Pipeline. –
Je ne trouve aucune référence à l'assemblage de XnaContentPipeline sur XNA 4.0 où j'essaie de l'ajouter au projet. pouvez-vous donner le nom entier? Merci ! – icaptan