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 :

[XNA] Question d'optimisation de chargement


Sujet :

XNA/Monogame

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut [XNA] Question d'optimisation de chargement
    Bonjour à tous,

    je programme actuellement un jeu en 3D (un survival horror), et j'ai une question en ce qui concerne les chargements/déchargements en utilisant le Content Manager. En fait pour le cas où le jeu se déroule en intérieur, j'avais pensé de découper chaque pièce et chaque couloir en fichiers séparés (par exemple couloir1 : couloir1.x, piece1 : piece1.x, etc) et d'afficher uniquement la pièce courante, avec les objets et les monstres éventuels, et toutes les informations de cette pièce (position de la caméra, des objets, des bounding box, l'état des objets (s'ils ont été activés ou non), les monstres, etc) seraient stockés dans un fichier xml. Donc en fait un petit exemple simple (et incorrect, c'est juste pour voir comment ça fonctionne) :

    piece1.xml :

    model : piece1.x
    posCam : 133, 55, 64
    posJoueur : 0, 0, 0
    objet1="clé" : 55, 100, 30

    C'est là que je me pose bcp de questions. Est ce que je devrais associer un fichier xml pour chaque pièce, ou bien faire un gros fichier qui contiendra toutes les informations ? Et faut-il charger dès le départ tous les fichiers en mémoire ou bien utiliser plusieurs content manager qui ne vont s'occuper que de charger ce qui doit être actuellement utilisé et décharger le reste ? (Je pourrais utiliser un content manager qui sera tout le temps utilisé par exemple et qui ne s'occuperait que des personnages, et un autre qui lui ne s'occuperait que de la map courrante et des objets qu'elle contient, mais j'ai peur que devoir charger constamment des fichiers ne soit pas très rapiden en même temps en chargeant tout dès le début, j'ai peur que la mémoire soit saturée).

    J'espère que vous pourrez m'éclairer et me conseiller.

    Merci

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Dans mon expérience,

    Tu dois essayer au maximum de rendre indépendant le moteur de jeu avec les données d'entrées. C'est à dire que les questions que tu te poses sont les bonnes, par contre il faut faire attention que cela ne modifie qu'une partie du code et n'ai pas des implications importantes sur le reste du code.

    Dans ce cas présent je te conseille la meilleure des solutions qui est de toute facon utilisé par les créateur de jeu.

    Crée un fichier par map et ajoute un fichier index qui permettra de dire où se trouve le fichier map en question.

    En reprenant ton exemple, on aurait un fichier piece1.xml :

    piece1.xml :

    model : piece1.x
    posCam : 133, 55, 64
    posJoueur : 0, 0, 0
    objet1="clé" : 55, 100, 30
    et un fichier index.xml qui aurait :

    piece1 : donnees/maps/piece1.xml
    Pourquoi ? Parce que comme cela, tu vas pouvoir simplement avoir une fonction de chargement de la pièce qui sera indépendante du reste. Le reste du jeu (et donc les références à cette pièce se feront par le nom piece1 et pas par le fichier directement.

    Quel est l'intérêt ? Tu pourras tout passer sous format binaire ou d'archive et tu pourras juste changer cette fonction pour récupérer correctement tes pièces.

    D'un point de vue chargement, généralement tu as un cache de données d'une taille donnée (peut être définie par le joueur). Si ce cache est vide, tu remplis sans décharger une zone (permet d'y retourner rapidement pour le joueur). Si ce cache est rempli, alors tu sors la pièce qui n'a pas été visité depuis un moment et toutes les ressources dédiées à cette pièce.

    Jc

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut
    Merci beaucoup pour ta réponse, je vais utiliser ton idée pour le fichier index.
    Pour le reste, si j'ai bien compris, j'aurais donc un Content Manager qui va charger les différents persos, monstres etc qui eux peuvent rester constamment dans la mémoire (il n'y en aura pas énormément, peut être 10-15 monstres, le perso principal (et pour les cinématiques d'autres persos mais ça je n'ai besoin de les charger que pour les cinématiques)), et un second Content Manager qui lui va charger la map courante avec tous les objets qui y sont associés. Pour la cache par contre, les fichiers doivent rester en mémoire, donc je suppose que je devrais créer un 3ième Content Manager pour ça ? (pck tout ce que je connais pour le décharger c'est content.Unload() qui décharge tout le Content Manager).

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Myth_Titans
    Merci beaucoup pour ta réponse, je vais utiliser ton idée pour le fichier index.
    Pour le reste, si j'ai bien compris, j'aurais donc un Content Manager qui va charger les différents persos, monstres etc qui eux peuvent rester constamment dans la mémoire (il n'y en aura pas énormément, peut être 10-15 monstres, le perso principal (et pour les cinématiques d'autres persos mais ça je n'ai besoin de les charger que pour les cinématiques)), et un second Content Manager qui lui va charger la map courante avec tous les objets qui y sont associés. Pour la cache par contre, les fichiers doivent rester en mémoire, donc je suppose que je devrais créer un 3ième Content Manager pour ça ? (pck tout ce que je connais pour le décharger c'est content.Unload() qui décharge tout le Content Manager).
    Oui cela me semble pas mal.

    Personnellement, je ferais un Content Manager pour le joueur et tout ce qui est associé (ils seront toujours en mémoire en principe de toute facon)

    Ensuite un Content Manager pour la map et tout ce qui y est rattaché.

    Et tu pourras faire la même chose comme gestion mémoire au niveau des maps. Version de base : Au changement de niveau/pièce, tu libères le manager et tu en recrées un.
    Version améliorée : tu peux faire une LRU sur les pièces comme j'ai déjà expliqué.

    Jc

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut
    Merci je vais faire comme ça alors.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question d'optimisation d'algo
    Par snoopo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 15/04/2007, 10h10
  2. Questions d'optimisation de requêtes
    Par beberd dans le forum Requêtes
    Réponses: 30
    Dernier message: 18/01/2007, 15h51
  3. question conceptuelle optimisation.
    Par mandrake_of_mandregas dans le forum Access
    Réponses: 1
    Dernier message: 29/12/2005, 10h07
  4. Pour optimiser le chargement ?
    Par Kerod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 06/04/2005, 22h50
  5. :?: question d'optimisation!
    Par Stopher dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2004, 17h15

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