IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Erreur lors d'une tentative de création de fichier xnb


Sujet :

XNA/Monogame

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut Erreur lors d'une tentative de création de fichier xnb
    Bonjour à tous, et à toutes.

    Et oui me revoila encore un peu bloqué dans l'exploration de XNA.
    Je cherche à présent à créer facilement des fichiers xnb sans devoir passer par la case visual studio. (Et oui je vois mal des graphistes tester leur développement en devant utiliser visual studio pour intégrer leurs ressources

    Bref, j'ai créer sur ma classe map un reader et un writer comme il faut.
    Et à coté une classe qui va me servir à faire la compilation de mes ressources.

    dont voici le source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class XnaCompiler
        {
            private ConstructorInfo[] constructors;
            private MethodInfo addWriter;
            private MethodInfo compileContent;
            private string cheminContent;
     
            public XnaCompiler(string cheminContent)
            {
                this.cheminContent = cheminContent;
                constructors = typeof(ContentCompiler).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);
                addWriter = typeof(ContentCompiler).GetMethod("AddTypeWriter",BindingFlags.NonPublic | BindingFlags.Instance);
                compileContent = typeof(ContentCompiler).GetMethod("Compile",BindingFlags.NonPublic | BindingFlags.Instance);
            }
     
            public void compilerCarte(Map map,string repertoireRelatif)
            {
                ContentCompiler compilateur = constructors[0].Invoke(null) as ContentCompiler;
     
                Map.MapWriter writer = new Map.MapWriter();
                addWriter.Invoke(compilateur, new object[] { writer });
     
                string repertoireFinal = Path.Combine(cheminContent, repertoireRelatif);
     
                using (FileStream stream = new FileStream(
                    Path.Combine(repertoireFinal , map.NomCarte+".xnb"),
                    FileMode.Create))
                {
                    compileContent.Invoke(compilateur, new object[] {
                        stream,
                        map,
                        TargetPlatform.Windows,
                        true,
                        repertoireFinal ,
                        repertoireFinal 
                    });
                }
            }
    Pour tout cela je me suis inspiré de ce qui est écrit sur la page web http://nickgravelyn.com/2008/10/crea...own-xnb-files/

    Mais lorsque je cherche à lancer la compilation de mon objet map, j'obtiens l'erreur : Une exception a été levée par la cible d'un appel. de type TargetInvocationException.

    Cela se produit sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    compileContent.Invoke(compilateur, new object[] {
                        stream,
                        map,
                        TargetPlatform.Windows,
                        true,
                        repertoireFinal ,
                        repertoireFinal 
                    });
    quand je regarde sur la console avant le targetInvocationException j'ai une erreur de type ArgumentNullException. Pourtant avec le débugueur, je n'ai visiblement aucun de mes arguments qui n'est pas initialisé.

    SInon sur l'explorateur de fichier, j'ai mon fichier xnb que je cherche à créeer, mais avec une taille de 0 octet.

    Si vous avez une idée de l'origine de ce problème merci d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Je n'ai pas réussi à utiliser ce code, aussi j'ai essayé de m'inspirer du code que j'avais trouvé il y a quelque temps.

    J'en ai parlé sur le post : http://www.developpez.net/forums/d75...-image-bitmap/

    Mais en utilisant cette librairie, je me retrouvais avec un problème de mémoire partagé qui était mal utilisé. Notamment parce que cette méthode fait un ce qui a pour effet de réinitialiser les services et tout le contexte graphique associé à la carte graphique (qui ne peut être alloué qu'une fois).

    Résultat cela fait planter lorsque suite à mon importation j'essayais d'afficher des sprites. En enlevant le dispose, je n'ai plus l'erreur. Mais je me retrouvais avec des carrés noirs à la place des sprites. Ce qui n'est pas du plus bel effet il faut avouer bref, devenant complétement ...

    J'ai fait une bidouille en attendant que quelqu'un ou que je trouve une solution...

    pour ceux que cela intéresse, je lance via la ligne de commande la compilation des mes ressources pour lesquels j'ai besoin de créer les fichiers xnb. Et oui, un graphiste n'a pas à utiliser visual studio pour gérer ces graphismes...

    (l'idée étant d'arriver à ce que cette librairie puisse réutilise les services/device initialisé via ma classe game... mais je n'ai pas réussi à trouver comment )

    Donc je ne met pas résolu, vu que c'est pas une solution propre.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    Salut,

    Tiens, cela pourra surement t'aider :
    http://www.ziggyware.com/readarticle.php?article_id=183

    Bonne chance

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Heu sur le fil de discution que j'ai évoqué, j'ai écrit :

    Citation Envoyé par estacado Voir le message
    Je vais noter ici ma petite reflexion sur le sujet...

    En fait, la nuit portant conseil :p j'ai eu l'idée de charger la Texture2D en même temps que mon image dans ma picturebox. J'ai vu qu'il fallait que je regarde du coté de la compilation dynamique de fichier xnb... en m'inspirant de l'utilitaire fourni ici http://www.ziggyware.com/readarticle.php?article_id=183 cela devrait être possible

    Aprés sur mon composant je n'ai plus qu'à réutiliser ma Texture2d en affichant seulement la zone qui m'interresse et le tour est joué.

    Je fais mes tests des que j'ai un peu de temps et je vous tiens au courant
    C'est la méthode que j'utilise pour générer mes fichiers XNB. Le soucis étant que je suis obligé de lancer cette génération en ligne de commande... car si je l'inclus dans mon éditeur, j'ai un problème de ressource partagé.

    Je suppose que c'est le device qui se retrouve utiliser de manière conflictuelle entre le compilateur de fichier xnb, et mon éditeur afin d'afficher les ressources sur sa fenêtre...

    Mais je n'ai pas réussi à les faire cohabiter de manière saine, d'où l'utilisation en mode console du compilateur.

    à moins que quelqu'un est une autre idée plus satisfaisante.

  5. #5
    Membre actif Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 273
    Points
    273
    Par défaut
    Un passage par MSBuild pour générer les fichiers XNB ? Le designer devra installer Visual Studio et le Game Studio, mais ne sera pas forcé de les utiliser. Ou du moins, il les utilisera en mode masqué.

    Ca lui permettra en plus de pouvoir tester plus finement tes programmes (Debug / Release).

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    Exuses moi, je n'avais pas lu l'autre post.

    Mais ce tuto permet une compilation XNB sans avoir besoin de Visual Studio, ce n'est pas ce que tu recherches ?

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Pour répondre à Idrakis :

    Oui tout à fait. Sauf que je n'arrive pas à l'utiliser avec mon viewer .
    Donc Je me retrouve obligé de passer par un mode console, et ce n'est pas trés propre qu'on puisse voir une fenêtre console s'ouvrir pour lancer le traitement... Maintenant il existe peut-être un moyen plus transparent pour le designer.

    Pour répondre à Gulix:

    Je n'avais pas penser à MSBuild. Mais je trouve cela encore plus lourd comme démarche d'imposer au designer de devoir installer des outils comme Visual Studio. Aprés je suis peut-être trop exigeant

  8. #8
    Membre actif Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 273
    Points
    273
    Par défaut
    Je n'avais pas penser à MSBuild. Mais je trouve cela encore plus lourd comme démarche d'imposer au designer de devoir installer des outils comme Visual Studio. Aprés je suis peut-être trop exigeant
    C'est vrai que ça peut être lourd, mais je préfère avoir quelque chose "de lourd" à installer une fois, et une méthode de génération fiable et reconnue de dispo tout de suite, que de galérer à contourner le système. J'ai essayé, mais ça a raté.
    L'outil étant gratuit, je pense que générer des scripts MSBuild, qui génèreront des XNB nickels, avec la possibilité de gérer diverses options (Release / Debug, Choix du ContentWriter, ...), est une idée à creuser. En tout cas, pour mon projet en cours, s'il devient nécessaire que mon designer puisse générer les XNB de son côté, c'est vers là que je me dirigerais.

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/10/2009, 09h41
  2. [XL-97] Erreur 13 lors d'une tentative de suppression de doublons d'une listbox
    Par Michel Delapouaitte dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/04/2009, 11h28
  3. Réponses: 4
    Dernier message: 08/03/2009, 21h11
  4. Réponses: 4
    Dernier message: 04/08/2007, 14h23
  5. erreur lors d'une création de base
    Par LuckySoft dans le forum Oracle
    Réponses: 2
    Dernier message: 03/07/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo