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

Auteur Sujet: [Résolu]Sprite fusion  (Lu 1848 fois)

0 Membres et 1 Invité sur ce sujet

Insinfi

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
[Résolu]Sprite fusion
« le: Avril 01, 2016, 01:55:27 am »
Bonjour, j'essaye de faire une gestion de bouton via une classe mais lors du display  je n'ai qu'un seul sprite d'afficher mais avec un semblant de fusion raté avec les autres.
 Bouton.cpp
Citer
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
//#include <Box2D/Box2D.h>
#include <iostream>
#include "Bouton.h"


sf::Texture TextureBouton;
sf::Sprite SpriteBouton;

Bouton::Bouton(char NomPGN[32], float OrigineX, float OrigineY, float PositionX, float PositionY)
{
   TextureBouton.loadFromFile(NomPGN);
   SpriteBouton.setTexture(TextureBouton);
   SpriteBouton.setOrigin(sf::Vector2f(OrigineX, OrigineY));
   SpriteBouton.setPosition(sf::Vector2f(PositionX, PositionY));
}


sf::Sprite Bouton::getSpriteBouton()
{
   return SpriteBouton;
}

Bouton.h
Citer
#ifndef DEF_BOUTON
#define DEF_BOUTON

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
//#include <Box2D/Box2D.h>
#include <iostream>


class Bouton
{
public:
   Bouton(char NomPGN[32], float OrigineX, float OrigineY, float PositionX, float PositionY);
   sf::Sprite getSpriteBouton();
};

#endif

Source.cpp
Citer
#include<SFML/Graphics.hpp>
#include<iostream>
#include "Menu.h"
#include "Bouton.h"

int main()
{
   //Varibale
   int NumeroMenu=1;

   //Creation Fenetre
   sf::RenderWindow wmenu(sf::VideoMode(1366, 768), "Menu", sf::Style::Default);

   //Objet
   Menu Menu("Fond.png");
   Bouton BoutonPlay("BoutonPlay.png", 176, 0, 683, 200);
   Bouton BoutonOption("BoutonOption.png", 153, 0, 683, 340);
   Bouton BoutonExit("BoutonExit.png", 153, 0, 683, 467);


   while (wmenu.isOpen())
   {

   sf::Event event;
   while (wmenu.pollEvent(event))
   {
      if (event.type == sf::Event::Closed)
         wmenu.close();
   }

      switch (NumeroMenu)
      {
      case 1:   //Menu de base
         wmenu.clear();
         wmenu.draw(Menu.getSpriteFond());
         wmenu.draw(BoutonPlay.getSpriteBouton());
         wmenu.draw(BoutonOption.getSpriteBouton());
         wmenu.draw(BoutonExit.getSpriteBouton());
         wmenu.display();
         break;
      case 2:   //Play
         break;
      case 3:   //Option
         break;
      default:
         std::cout << "ERROR";
         break;
      }

   }

   return 0;
}

Le résultat
http://prntscr.com/amlugh
Les images que je devrai avoir
http://prntscr.com/amluot

Merci d'avance pour votre aide
« Modifié: Avril 17, 2016, 12:46:41 pm par Insinfi »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Sprite fusionne
« Réponse #1 le: Avril 01, 2016, 02:29:45 am »
T'as qu'une seule texture et qu'un seul sprite. (sf::Texture TextureBouton; sf::Sprite SpriteBouton;)
Donc ben ouais, au final t'as qu'un seul truc affiché.

Quand tu fais ça
   Bouton BoutonPlay("BoutonPlay.png", 176, 0, 683, 200);
   Bouton BoutonOption("BoutonOption.png", 153, 0, 683, 340);
   Bouton BoutonExit("BoutonExit.png", 153, 0, 683, 467);
Au niveau de TextureBouton c'est comme si tu faisais ça
   TextureBouton.loadFromFile("BoutonPlay.png");
   TextureBouton.loadFromFile("BoutonOption.png");
   TextureBouton.loadFromFile("BoutonExit.png");
Et c'est pareil pour les coordonnées et l'origine.
En gros tu modifies plusieurs fois TextureBouton et SpriteBouton, puis tu draw 3 fois SpriteBouton.

PS: utilise le truc de "code" pour afficher du code sur le forum plutot que "citer"

Insinfi

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Sprite fusionne
« Réponse #2 le: Avril 01, 2016, 10:12:47 am »
Un grand merci et désole première fois que je poster sur ce forum je n'ai pas vu le bouton code.
Donc je devrai sortir la création de texture de la classe? ou juste utiliser une variables pour nommer la texture différaient?

Insinfi

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Sprite fusionne
« Réponse #3 le: Avril 01, 2016, 11:08:42 am »
Voila voila après quelque petit recherche je suis parvenu a faire ça
Bouton.cpp
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
//#include <Box2D/Box2D.h>
#include <iostream>
#include "Bouton.h"


        sf::Texture TextureBouton[15];
        sf::Sprite SpriteBouton[15];

Bouton::Bouton(char NomPGN[32],int NumeroBouton, float OrigineX, float OrigineY, float PositionX, float PositionY)
{
        TextureBouton[NumeroBouton].loadFromFile(NomPGN);
        SpriteBouton[NumeroBouton].setTexture(TextureBouton[NumeroBouton]);
        SpriteBouton[NumeroBouton].setOrigin(sf::Vector2f(OrigineX, OrigineY));
        SpriteBouton[NumeroBouton].setPosition(sf::Vector2f(PositionX, PositionY));
}


sf::Sprite Bouton::getSpriteBouton(int NumeroBouton)
{
        return SpriteBouton[NumeroBouton];
}

Bouton.h
#ifndef DEF_BOUTON
#define DEF_BOUTON

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
//#include <Box2D/Box2D.h>
#include <iostream>


class Bouton
{
public:
        Bouton(char NomPGN[32], int NumeroBouton, float OrigineX, float OrigineY, float PositionX, float PositionY);
        sf::Sprite getSpriteBouton(int NumeroBouton);
};

#endif

Source.cppµ
#include<SFML/Graphics.hpp>
#include<iostream>
#include "Menu.h"
#include "Bouton.h"

int main()
{
        //Varibale
        int NumeroMenu=1;

        //Creation Fenetre
        sf::RenderWindow wmenu(sf::VideoMode(1366, 768), "Menu", sf::Style::Default);

        //Objet
        Menu Menu("Fond.png");
        Bouton BoutonPlay("BoutonPlay.png",0,  176, 0, 683, 200);
        Bouton BoutonOption("BoutonOption.png",1, 153, 0, 683, 340);
        Bouton BoutonExit("BoutonExit.png", 2,153, 0, 683, 467);


        while (wmenu.isOpen())
        {

        sf::Event event;
        while (wmenu.pollEvent(event))
        {
                if (event.type == sf::Event::Closed)
                        wmenu.close();
        }

                switch (NumeroMenu)
                {
                case 1: //Menu de base
                        wmenu.clear();
                        wmenu.draw(Menu.getSpriteFond());
                        wmenu.draw(BoutonPlay.getSpriteBouton(0));
                        wmenu.draw(BoutonOption.getSpriteBouton(1));
                        wmenu.draw(BoutonExit.getSpriteBouton(2));
                        wmenu.display();
                        break;
                case 2: //Play
                        break;
                case 3: //Option
                        break;
                default:
                        std::cout << "ERROR";
                        break;
                }

        }

        return 0;
}

Et ça fonctionne mais je sais pas si c'est optimiser