Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Ma class consomme trop de memoire  (Lu 794 fois)

0 Membres et 1 Invité sur ce sujet

TheKeyblader

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Ma class consomme trop de memoire
« le: Mai 16, 2016, 08:01:53 pm »
Bonjour tout le monde.Je suis actuellement en train de créer un petit jeu vidéo en 2D avec SFML.
Voilà le topo j'ai une classe Puces de base qui sont des entités que je dois instancier 30fois.
Le problème est lorsque je charge les textures dans les instances. Rien qu'a 5 instances chargée  le jeu me consomme 800MO puis crash!!!! Si utilise un tableau ou une liste j'ai la même chose
Si je charge que 4 instances j'ai un pic a 600MO et puis je reviens a 50MO   après chargement alors pourquoi ce pic?
est-ce que c'est un problème avec le GC
voici ma class puces de  base
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SFML.Graphics;
using SFML.System;
using SFML.Window;
using System.Windows.Forms;
namespace jeu_hacker
{
     public class Puces_de_base
    {
        public RenderWindow app { private get ; set; }
        private Sprite perso { get; set; }
        private Texture tex { get; set; }
        public int life { get; internal set; }
        public int energy { get; internal set; }
        public  Puces_de_base(RenderWindow app)
        {
            this.app = app;
             
        }
       
        public void LoadTextures(string chemin)
        {
            tex = new Texture(chemin);
            perso = new Sprite(tex);
            perso.Scale = new Vector2f((6.25f * app.Size.X / 100f) / perso.Texture.Size.X, (6.25f * app.Size.X / 100f) / perso.Texture.Size.Y);
        }
         
        public void Suppression()
        {
            app.Dispose();
            perso.Dispose();
            tex.Dispose();
             
        }
        public Puces_attaque Transformation()
        {
            Puces_attaque convert = new Puces_attaque(this.app);
            convert.tex = new Texture("Ressources/Puces attaque.png");
            convert.tex.Smooth = true;
            convert.perso = new Sprite(convert.tex);
            convert.perso.Scale = new Vector2f((6.25f * app.Size.X / 100f) / convert.perso.Texture.Size.X, (6.25f * app.Size.X / 100f) / convert.perso.Texture.Size.Y);
            convert.perso.Position = perso.Position;
            return convert;
        }
        public void Afficher(Vector2f position)
        {
            perso.Position = position;
            app.Draw(perso);
        }
        public void Afficher(Vector2f position,bool vrai)
        {
            if (vrai)
            {
                perso.Position = new Vector2f(position.X - 0.0625f * app.Size.X, position.Y - 0.0625f * app.Size.X);
                 
                app.Draw(perso);
            }
        }
        public void Afficher()
        {
            app.Draw(perso);
        }
    }
     
 
 
 
 
    public class Puces_attaque : Puces_de_base
    {
        public Puces_attaque(RenderWindow app):base(app)
        {
             
            life = 200;
 
        }
         
 
    }
}
et mon Main
namespace jeu_hacker
{
    class main
    {
        static void OnClose(object sender, EventArgs e)
        {
            // Close the window when OnClose event is received
            RenderWindow window = (RenderWindow)sender;
            window.Close();
        }
        static void onClose(object sender, SFML.Window.KeyEventArgs e)
        {
            if (e.Code == Keyboard.Key.F12)
            {
                RenderWindow window = (RenderWindow)sender;
                window.Close();
            }
        }
        static SFML.Graphics.View vue;
        static  void Zoom(object sender, MouseWheelScrollEventArgs e)
        {
           
            SFML.Graphics.View vueActuelle = vue;
            vueActuelle.Zoom(1 + (e.Delta / 10f)*-1);
             
            if (vueActuelle.Size.X > ((RenderWindow)sender).DefaultView.Size.X|| vueActuelle.Size.Y > ((RenderWindow)sender).DefaultView.Size.Y) { vueActuelle.Size = new Vector2f( ((RenderWindow)sender).DefaultView.Size.X , ((RenderWindow)sender).DefaultView.Size.Y); }
             
             vue = vueActuelle;
        }
         
        static void Main()
        {
            // Create the main window
            int nombreentitées = 0;
            ContextSettings settings = new ContextSettings(32, 32, 8);
            RenderWindow app = new RenderWindow(new VideoMode(1280,720), "SFML Works!",Styles.Default,settings);
             
            Vector2f taille_mapX = new Vector2f(app.Size.X, app.Size.Y * 2f);
            app.Closed += new EventHandler(OnClose);
            app.KeyPressed += new EventHandler<SFML.Window.KeyEventArgs>(onClose);
            app.MouseWheelScrolled += new EventHandler<MouseWheelScrollEventArgs>(Zoom);
            Color windowColor = new Color(0, 192, 255);
 
            Puces_de_base entitées = new Puces_de_base(app);
            entitées.LoadTextures("Ressources/puce.png");
            Puces_de_base entitées2 = new Puces_de_base(app);
            entitées2.LoadTextures("Ressources/puce.png");
            vue = new SFML.Graphics.View(new FloatRect(new Vector2f(640, 360), new Vector2f(854, 480)));
            app.SetView(vue);
 
            Puces_de_base entitées3 = new Puces_de_base(app);
            entitées3.LoadTextures("Ressources/puce.png");
            Puces_de_base entitées4 = new Puces_de_base(app);
            entitées4.LoadTextures("Ressources/puce.png");
            Puces_de_base entitées5 = new Puces_de_base(app);
            entitées5.LoadTextures("Ressources/puce.png");
////etc

 

anything