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

C++ Discussion :

Optimisation de mémoire / rapiditée


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2004
    Messages : 812
    Points : 1 047
    Points
    1 047
    Par défaut Optimisation de mémoire / rapiditée
    Bourjour a tous,

    Je éveloppe un jeux en 2D, donc une classe qui permet de recréer a partir d'un fichier texte un pointeur de surface qui est la map.
    Pour un peut plus de précision sur la structure :

    Fichiers :
    Dossier : Images de décores terrain
    Dossier : Images de décore superposer

    Donées:
    Enum : Liste des diférentes valeures (monstre/joueure/mure...)
    Classes/structures qui contiène l'équivalent des diférentes cases.

    Fichier texte qui contient la liste des composants.

    Donc pour mentenant venir au problème, il s'ofre a moi deux possibilitées :
    -Soit je charge le fichier, je créer un enchevètrement de structure, puis je créer la surface qui seras le décore, et je garde cette surface en mémoire, puis j'en ferais une copie sur laquel je rajouterais les personages ect....
    J'aurais donc deux surface en mémoire.
    -Soit je recréer a chaque afichage la surface a partir de la structure.
    J'aurais donc la structure en mémoire.

    J'aurais de nombreuses map, qui feron entre 100 et 1 000 carées de 32*32PX(1carée=1image, biensure on put en superposer plusieures)

    Qu'en penssez vous?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 050
    Points : 40 207
    Points
    40 207
    Par défaut
    Eh bien, je pense qu'en rapidité, précalculer la map active semble le mieux. par contre, tu ne pourras pas t'en servir pour faire des images de terrain (tiles) animées (il te faudra utiliser des images d'objets (sprites)).

    Question occupation mémoire, je suppose qu'une seul map est chargée à la fois:
    une carte de 1000 tiles 32*32 en profondeur de couleurs 24 bits: 3Mo environ. Je pense que sur un PC, 3/4 Mo de mémoire sont envisageables.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2004
    Messages : 812
    Points : 1 047
    Points
    1 047
    Par défaut
    Enfaite je travaille en 32Bits, et il y auras surement de la superposition avec diférents alphas, donc tu me conseille de calculer le screen? C'est aussi ce que je pensais. Et au niveau du calcule, il vaut mieux calculer durant le chargement du fichier, de manière économiser la mémoire, ou charger le fichier sous la strucuture, générer la surface, puis détruire la structure?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 050
    Points : 40 207
    Points
    40 207
    Par défaut
    à mon avis, il te faudra garder la structure: Puisque c'est la structure qui décrit la map, c'est avec la structure que tu pourras détecter les collisions avec le décor.
    Donc pour moi, il vaut mieux précalculer l'image après avoir construit la structure, et garder les deux.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Bonjour,

    Quel rapport avec le C++ ?
    Il y a sûrement un autre forum mieux adapté à ce type de question (qui est finalement indépendant du langage).

  6. #6
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2004
    Messages : 812
    Points : 1 047
    Points
    1 047
    Par défaut
    Et bien le raport est que :
    1. Je développe en c++
    2. SDL, la librairie que j'utilise, est une librairie C

    Voila pourquoi j'ai pensser que poster ici était mieux aproprier.

    Sinon, donc il faudras que je garde les deux en mémoires? C'est vrai que je n'avais pas pensser au colisions.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  7. #7
    mat.M
    Invité(e)
    Par défaut
    -Soit je charge le fichier, je créer un enchevètrement de structure, puis je créer la surface qui seras le décore, et je garde cette surface en mémoire, puis j'en ferais une copie sur laquel je rajouterais les personages ect....
    J'aurais donc deux surface en mémoire.
    -Soit je recréer a chaque afichage la surface a partir de la structure.
    J'aurais donc la structure en mémoire.
    La deuxième solution me paraît à éviter absolument car perte de fluidité d'affichage ( FPS )

    Il faut prendre la première solution.
    Il faut en fait initialiser un tableau qui mémorisera les positions en X et Y des "tuiles" du décor.
    Par exemple prendre une structure simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct tuile{
    int X;
    int Y;
    bool PermettreCollision;
    }
    Un simple fread suffit pour l'initialiser.
    Le membre PermettreCollision peut prendre true si par exemple le carré de la tuile ( par ex 32X32 ) c'est de l'eau.
    Pour afficher les tuiles une simple boucle imbriquée où on balaie tous les X et tous les Y va afficher les tuiles

    Pour les tuiles du décor il est indispensable de développer parallèlement au moteur de jeu un éditeur pour dessiner ce décor .
    On peut rajouter une autre donnée membre qui retourne le numéro d'index représentant un "calque" ou "layer" pour donner des apparences multicouches.

  8. #8
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2004
    Messages : 812
    Points : 1 047
    Points
    1 047
    Par défaut
    Enfaite, a la place d'une structure, j'ai une peutite classe, qui ressemble a ce que tu a dit avec en plus : "Le numéro de l'image[c'est bien bo une tuile mais si elle reste noire...]","Une methode qui Blit l'image sur un pointeur de surface". Une autre classe créer alors une liste d'objet de cette première classe, (en même temp que le fichier de map est lut) puis elle a come valeur : Nom + alpha(apliquer a toute la surface en coure) . Enfin, une torisième classe, créer une liste de cette deuxième classe en lisan le fichier. L'ordre de superposition dépend de l'ordre de la liste -> Donc l'ordre de lècture dans le fichier.

    Voila esque c'est bien adapter pour ce que je fait? Sinon, j'ai quelques problèmes avec la trnsparence et mes images(j'utilise SDL) :

    -J'ai des images BMP, comment mêttre de la trensparence dedan?(ou doije utiliser un autre format?)
    -Comment charger une autre image que un BMP sur une surface?
    -Comment Mêtre une transparence de X% sur une couleur donée dans une surface?
    -Comment changer la trensparence totale d'une surface?

    Pour mes "tuiles" : dois-je garder les images en mémoire dans l'aplication, ou les charger puis les détruires a chaque changement de map?

    Esque je devrais rajouter un Index pour chaquin de mes blocks pour savoir dans quel ordre les superposer? Et si c'est le cas, comment puije organiser ma liste(std::list) sur cette index?

    Pour l'éditeur/créateur de map, dois-je créer une nouvelle structure de classe séparer pour l'enregistrement, ou tout simplement ajouter des methodes a ma classe?



    Je sais sa fait bocoup de question, et ce n'est que le début ^^
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 050
    Points : 40 207
    Points
    40 207
    Par défaut
    Eh bien pour ces questio, la plupart des réponses dépendent de la librairie utilisée.
    * Par exemple, un BMP n'a pas de transparence "en soi", mais tu as surement des fonctions qui permettent de spécifier qu'une des couleurs sera 100% transparente (comme TransparentBlt() avec WindowsGDI).
    * Pour charger une image non-bmp, cela dépend des formats supportés par la lib
    * La transparence avec % sur une couleur donnée, c'est assez rare... Généralement, on utilise directement des images 32 bits (rouge, vert, bleu, transparence)

    Bref, je ne peux pas t'en dire plus car je ne connais pas SDL, mais ce sont des généralités...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2004
    Messages : 812
    Points : 1 047
    Points
    1 047
    Par défaut
    Oui, je me doute que c'est possible, car si sa ne l'avais pas était, des persones se serais emprèsser de développer de tel fontions ^^
    Mais la question est comment faire cela avec la SDL?

    Edit : Je vien d'opter pour la solution Lecture/Enregistrement dans la même classe. Les autres questions rèstent en suspend, et vien sajouter a la liste celle si :
    Quèl est selon vous la meilleur fasson de crypter&comprèsser mes fichier de map? Je voudrais en faite créer une fonction qui lit le fichier, le décrypter & décomprèsse(ZLIB?), et retourn un std::stringstream ou un std::string.
    Et je voudrais a l'inverse une fonction qui avec un std::stringstream crypte et enregistre. Pour sela il me faut utiliser des algorithme de comprèssion et cryptage, et je voudrais savoir si il y a des lib qui font sa facilement, et comment les utiliser?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. [optimisation] Gestion mémoire
    Par BSans dans le forum C
    Réponses: 5
    Dernier message: 20/11/2009, 17h46
  2. optimiser java mémoire, charge
    Par cdm1024 dans le forum Général Java
    Réponses: 3
    Dernier message: 24/02/2009, 18h17
  3. optimisation question de rapidité (<> vs not)
    Par Just-Soft dans le forum Langage
    Réponses: 5
    Dernier message: 20/11/2008, 12h51
  4. Optimiser la mémoire pour réduire le temp d'import
    Par Bourak dans le forum Administration
    Réponses: 20
    Dernier message: 03/11/2008, 11h23
  5. Optimiser la mémoire d'une app VB 2005
    Par Diabless6 dans le forum VB.NET
    Réponses: 34
    Dernier message: 21/08/2007, 20h18

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