Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - slaanish

Pages: [1]
1
Effectivement c'était ça ...
Une erreur somme toute bien bête  >:( .

En tout cas merci beaucoup pour ces réponses rapides !

2
Alors mon debugger me sors:
Child process PID: 4816
Program received signal SIGSEGV, Segmentation fault.
In sf::RenderTarget::draw (this=0xbaadf035, vertices=0x28fb14, vertexCount=4, type=sf::Quads, states=...) at D:\developpement\sfml\sfml\src\SFML\Graphics\RenderTarget.cpp:159 ()
Debugger finished with status 0

Pour l'instance de Map, c'est géré comme ça :

La classe EditMode:
class EditMode : public GameMode
{
        public:

                EditMode (sf::RenderWindow * window);   //Constructeur
                void drawScreen() ;
                void processEvent (sf::Event event) ;

                sf::Texture m_text ;
                sf::Sprite m_sprite ;
                Map * m_map ;


};

#include "EditMode.h"

EditMode::EditMode (sf::RenderWindow * window) : GameMode (window)
{
        m_text.loadFromFile ("tilesheet.png", sf::IntRect (0, 0, 32, 32)) ;
        m_sprite.setTexture (m_text);
        m_map = new Map(m_window) ;
}

void EditMode::drawScreen()
{
    m_map->draw();

        //m_window->draw(m_sprite);
}

void EditMode::processEvent (sf::Event event)
{
        GameMode::processEvent (event) ;

        switch (event.type)
        {
                case sf::Event::MouseButtonPressed:
                        //m_map->m_layer[event.mouseButton.x/32][event.mouseButton.y/32] = 1 - m_map->m_layer[event.mouseButton.x/32][event.mouseButton.y/32];
                        break;

                default
                                :
                        break;
        }
}

La classe Map:
#include <SFML/Graphics.hpp>
#include <vector>
#include <map>
#include <iostream>
#include <fstream>
#include "functions.h"

class Map
{
        public:

                Map (sf::RenderWindow * window);

                void draw () ;
                void drawTile (unsigned int x, unsigned int y);
                void loadFromFile (std::string name);
                void loadTiles() ;

                std::vector<std::vector<std::string> > m_layer ;
                sf::Vector2i m_size ;
                sf::RenderWindow * m_window;
                std::map<std::string, std::vector<std::vector<sf::Sprite> > > m_tiles ;
                std::map<std::string, sf::Texture> m_tileTextures;
};
#include "Map.h"
using namespace std;

Map::Map (sf::RenderWindow * window)
{
        loadFromFile ("1");
        loadTiles();
}

void Map::loadFromFile (std::string name)
{

}

void Map::draw()
{
        sf::Sprite sprite ;
        sf::Texture texture ;

        if (texture.loadFromFile ("0.png"))
        {
                std::cout << "Texture chargee" << std::endl ;
                sprite.setTexture (texture) ;
                std::cout << "Texture appliquee" ;
                m_window->draw (sprite);
        }


}

void Map::drawTile (unsigned int x, unsigned int y)
{
}

void Map::loadTiles()
{
}
 

3
Bonjour,

J'utilise SFML 2.1 avec CodeBlocks 12.11, et quand je lance mon programme (qui compile sans erreur), il crash et j'obtiens :
Process returned -1073741819 (0xC0000005)   execution time : 4.196 s

Contrairement aux sujets sur cette erreur que j'aipu trouver, le code de base proposé dans le tutoriel fonctionne très bien. Mais d'utiliser la POO, ça marchait, mais avec un certain code j'ai cette erreur, je ne sais vraiment pas d'où elle vient.

En gros, j'ai une classe EditMode, dont l'attribut m_window est un pointeur vers la sf::RenderWindow courante.
Elle utilise la méthode drawScreen, qui est appelée à chaque tour de la boucle principale.
Si j'implémente cette méthode de la façon suivante, tout marche bien :

void EditMode::drawScreen()
{
    sf::Sprite sprite ;
   sf::Texture texture ;


   if (texture.loadFromFile ("0.png"))
   {
      std::cout << "Texture chargee" << std::endl ;
      sprite.setTexture (texture) ;
      std::cout << "Texture appliquee" ;
      m_window->draw (sprite);
   }


}
(oui je sais c'est dégueu de recréer la texture à chaque tour de boucle, c'est juste pour l'exemple..)

Mais si je crée une classe Map, disposant d'une méthode draw() et d'un attribut m_window pointant vers la fenêtre principale, et que ma classe EditMode dispose d'un attribut m_map pointeur vers une instance de la classe Map, en définissant mes méthodes de la façon suivante, j'obtiens l'erreur :

void EditMode::drawScreen()
{
    m_map->draw();
}


void Map::draw()
{

   sf::Sprite sprite ;
   sf::Texture texture ;

   if (texture.loadFromFile ("0.png"))
   {
      std::cout << "Texture chargee" << std::endl ;
      sprite.setTexture (texture) ;
      std::cout << "Texture appliquee" ;
      m_window->draw (sprite);
   }


}


Petite précision, j'utilise MinGW fourni avec CodeBlocks 12.11, j'ai téléchargé la version "GCC 4.7 TDM (SJLJ) - 32 bits", j'utilise le compilateur en mode debug et j'ai configuré mon Linker settings de la manière suivante :

sfml-graphics-d
sfml-window-d
sfml-system-d



Pages: [1]