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.


Sujets - bottus

Pages: [1]
1
Fenêtrage / Detection clic multiple
« le: Mai 19, 2013, 05:45:40 pm »
bonjour tous le monde,

Voila j'ai un petit soucis lié a la sfml vous vous en doutez et plus précisément avec la détection de clic:
je suis en train de coder un éditeur de map pour un petit projet:
le soucis etant que lorsque je clic sur ma souri, la detection a bien lieu mais plusieurs fois, quand je print les coordonne de ma souri au moment du clic cela s'affiche plusieurs fois et me donne des resultats bizarre pour editer les objets sur la map.
l'effet attendu est le suivant:
lorsque je clic sur un des sprites de ma fentre, le sprite (donc le type d'object sur la map en fait) doit changer, hors lorsque je clic, ca change plusieurs cases en meme temps ...
trève de bavardage je vous montre mon code :)
Merci d'avance a celui qui prendra du temps pour lire mon code.

#define         WINDOWSIZE      1000

class           Render
{
private:
  std::vector<std::vector<Object *> >     _list;
  int                                     *_size;
  int                                     *_players;
  int                                     *_rate;
  Types                                    _currentType;
  sf::Image                               *_image[2];
public:
  Render(int *size, int *players, int *rate);
  ~Render();
  /****/
  void                  setCurrentType(Types type);
  void                  setList(std::vector<std::vector<Object *> > list);
  std::vector<std::vector<Object *> >   getList() const;
  void                  print();
  void                  putNewObj(int x, int y);
  void                  sfmlLaunch();
  static void           *run(void *data);
  void                  setImg();
};

 

void            Render::setImg()
{
  sf::Sprite    *sprite;

  for (std::vector<std::vector<Object *> >::iterator it = this->_list.begin(); it != this->_list.end(); ++it)
    {
      for (std::vector<Object *>::iterator it2 = (*it).begin(); it2 != (*it).end(); ++it2)
        {
          sprite = new sf::Sprite();
          if ((*it2)->getType() == UNDESTRUCTIBLEWALL)
            sprite->SetImage(*(this->_image[0]));
          else if ((*it2)->getType() == NONE)
            sprite->SetImage(*(this->_image[1]));
          sprite->SetPosition((*it2)->getX(), (*it2)->getY());
          sprite->Resize(WINDOWSIZE / (*this->_size), WINDOWSIZE / (*this->_size));
          (*it2)->setSprite(sprite);
        }
    }
}

void            Render::putNewObj(int x, int y)
{
  sf::Sprite    *sprite;

  std::cout << x << "-" << y << std::endl;
  for (std::vector<std::vector<Object *> >::iterator it = this->_list.begin(); it != this->_list.end(); ++it)
    {
      for (std::vector<Object *>::iterator it2 = (*it).begin(); it2 != (*it).end(); ++it2)
        {
          if (((*it2)->getX() >= x) && (x <= ((*it2)->getX() + (WINDOWSIZE / (*this->_size)))) && ((*it2)->getY() >= y) && (y <= ((*it2)->getY() + (WINDOWSIZE / (*this->_size)))))
            {
              sprite = new sf::Sprite();
              sprite->SetImage(*(this->_image[0]));
              sprite->SetPosition((*it2)->getX(), (*it2)->getY());
              sprite->Resize(WINDOWSIZE / (*this->_size), WINDOWSIZE / (*this->_size));
              delete((*it2)->getSprite());
              (*it2)->setSprite(sprite);
            }
        }
    }
}

void            Render::sfmlLaunch()
{
  sf::RenderWindow app(sf::VideoMode(WINDOWSIZE, WINDOWSIZE, 32), "mapGenerator");

  while (app.IsOpened())
    {
      sf::Event event;
      while (app.GetEvent(event))
        {
          if (event.Type == sf::Event::Closed)
            app.Close();
        }
      const sf::Input &input = app.GetInput();
      if(event.Type == sf::Event::MouseButtonPressed)
        {
          sf::Mouse::Button button = event.MouseButton.Button;
          if (button == sf::Mouse::Left)
            this->putNewObj(input.GetMouseX(), input.GetMouseY());
        }
      app.Clear();
      for (std::vector<std::vector<Object *> >::iterator it = this->_list.begin(); it != this->_list.end(); ++it)
        {
          for (std::vector<Object *>::iterator it2 = (*it).begin(); it2 != (*it).end(); ++it2)
            app.Draw(*((*it2)->getSprite()));
        }
      app.Display();
    }
}
 

2
Audio / segfault | new sf::Music
« le: Mars 24, 2013, 02:22:28 pm »
Bonjour !

alors voila j'expose mon soucis  :)
Je suis en train de realiser un jeu sous linux et j'aimerai utiliser le module audio pour integrer une musique.

je poste mon code histoire que l'on sache de quoi on parle.

class maClasse
{
private:
sf::Music *_music;
public
...
...
...
};
 

  this->_music = new sf::Music();
  if (!this->_music->OpenFromFile("sounds/murloc.mp3"))
    std::cout << "Impossible de loader le fichier" << std::endl;
  else
    {
      this->_music->SetLoop(true);
      this->_music->Play();
    }
 


le code CPP se situe dans mon constructeur, je veux simplement init un son et le play derriere ...
mon soucis se situe au niveau du   this->_music = new sf::Music();
je segfault sur cette partie et je ne comprend absolument pas pourquoi ...
sur le net on vois beaucoup d'utilisation sans pointeur hors je suis dans un systeme de classe ... donc je souhaite garder un pointeur ...

si quelqu'un pouvait m'eclairer .. Merci :)

Pages: [1]
anything