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

Auteur Sujet: sf::RenderWindow draw  (Lu 2151 fois)

0 Membres et 2 Invités sur ce sujet

swa870

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
sf::RenderWindow draw
« le: Septembre 12, 2013, 06:25:08 am »
Bonjour,
J'ai une fonction dans une class qui hérite d'un sf::sprite et je voudrais dessiner mon sprite dans ma class mais il n s'affiche pas.

class TJoueur : public sf::Sprite
{

protected:
        string MNom;
        int MHp;
        int MScore;
        int MLevel;
        int MNiveau;
        int MLastMoveL;
        int MLastMoveR;
        sf::Texture MarioTexture;
       
        int MChoixJoueur;
public:
        TJoueur(void);
        ~TJoueur(void);
        void MoveJoueur(int InMoved, sf::RenderWindow &window);
};

ma fonction ds le cpp:
void TJoueur::MoveJoueur(int InMoved, sf::RenderWindow &window)
{
        float position=0;
        switch (InMoved)
        {
        case 0 :
                setTextureRect(sf::IntRect(124,(45*MChoixJoueur),28,35));
                MLastMoveL = 0;MLastMoveR=0;
                break;
        case 1:
                if(MLastMoveL == 4)
                MLastMoveL = 0;
                setTextureRect(sf::IntRect(91-(MLastMoveL*30),(45*MChoixJoueur),28,35));
                setPosition(getPosition().x-10, 20);
                cout << MLastMoveL;
                MLastMoveL ++;
       
                break;
        case 2:
                if(MLastMoveR == 4)
                MLastMoveR = 0;
                setTextureRect(sf::IntRect(151+(MLastMoveR*30),(45*MChoixJoueur),28,35));
                setPosition(getPosition().x+10, 20);
                MLastMoveR++;
                break;

        default:
                setTextureRect(sf::IntRect(124,(45*MChoixJoueur),28,35));
                MLastMoveL = 0;MLastMoveR=0;
                break;
               
                window.draw(*this);
        }
}

j'essais de draw mon sprite avec *this, mais ma fenêtre reste noir.... si je fais le draw dans mon programme principale alors mon image s'affiche... (window.draw(*Joueur);)

« Modifié: Septembre 12, 2013, 08:02:59 am par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::RenderWindow draw
« Réponse #1 le: Septembre 12, 2013, 08:04:42 am »
Il faudrait voir le code qui appelle cette fonction, voir comment tu gères ta boucle d'affichage.

Note qu'un draw n'a rien à faire dans une fonction Move (si tu ne bouges pas, ton joueur ne sera jamais plus dessiné ??). Il faut essayer de découpler au maximum la logique et l'affichage.
Laurent Gomila - SFML developer

swa870

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : sf::RenderWindow draw
« Réponse #2 le: Septembre 12, 2013, 08:49:24 pm »
voila mon programme principale.... je voulais mettre mon draw dans mon move, car il est dans une boucle

void GameEvent(sf::RenderWindow &window, TJoueur *&Joueur,TMenu *&Menu)
{


                sf::Event event;
                //gestio des evenments
                while (window.pollEvent(event))
                {
                        switch (event.type)
                        {
                        case sf::Event::Closed:
                                window.close();
                                break;
                        case sf::Event::KeyPressed:
                                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                                        Menu->setselected(-1);
                                        //window.close();
                                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                                {
                                        Joueur->MoveJoueur(2,window);
                                }
                                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                                {
                                        Joueur->MoveJoueur(1,window);
                                       
                                }
                                else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
                                {

                                }
                                else
                                        Joueur->MoveJoueur(0,window);
                                break;
                                 case sf::Event::MouseButtonPressed:
                if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
                {

                }
                break;
                        default:
                                break;
                        }

                }
        window.draw(*Joueur);
}
int main()
{
        sf::RenderWindow window(sf::VideoMode(1024,768,32), "Module de fenetre");
       
        sf::Sprite MBackground;
        sf::Texture MenuBackground;
        MenuBackground.loadFromFile("mario_menu.jpg");
        MBackground.setTexture(MenuBackground);
        MBackground.setScale(.8,.8);
        TJoueur *Joueur;
        Joueur = new TJoueur;
        Joueur->MoveJoueur(0,window);
        window.setFramerateLimit(60);
        TMenu *Menu;
        initialize(Menu);
       

        while (window.isOpen())
        {
               
        window.clear();
        //     
        //      Joueur->anim(img);
               
                switch (Menu->getselected())
                {
                case -1:
                        window.draw(MBackground);
                        Menu->CheckSelected(window);   
                        Menu->DrawMenu(window);        
                        break;
                case 0:
               
                        GameEvent(window,Joueur, Menu);
                        break;
                case 1:window.close();
                        break;
                case 2:window.close();
                        break;
                case 3: window.close();
                        break;
                case 4: window.close();
                        break;
                default:
                        break;
                }
                window.display();
        }
               
        return 0;
}
« Modifié: Septembre 12, 2013, 08:54:29 pm par swa870 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::RenderWindow draw
« Réponse #3 le: Septembre 12, 2013, 09:56:38 pm »
La structure de ton programme est assez chaotique, je ne sais pas comment tu fais pour t'y retrouver :P

En plus tu mélanges évènements et entrées temps-réel.

Bref, lis bien les tutoriels, inspire toi des exemples du SDK / wiki / forum ; prends bien le temps de faire une base propre et bien organisée pour ton programme.
Laurent Gomila - SFML developer

swa870

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : sf::RenderWindow draw
« Réponse #4 le: Septembre 13, 2013, 02:56:43 am »
Parfait merci... C'est le premier jeux que je fais et cest pour mon cours.... Les tutoriel sont tous sur ce site?

J'ai eu un peut de difficulter a penser a séparer mon jeu avec un menu....

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::RenderWindow draw
« Réponse #5 le: Septembre 13, 2013, 07:39:18 am »
Citer
Les tutoriel sont tous sur ce site?
Ceux que tu dois lire, oui ;)
Laurent Gomila - SFML developer

swa870

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : sf::RenderWindow draw
« Réponse #6 le: Septembre 13, 2013, 02:16:07 pm »
Parfait merci bcp de tes réponses :)

Dernière question... je ne sais pas si tu pourrais me conseiller pour mes classes... je t'explique ma situation.

J'ai une classe joueur qui contient tous les informations du joueur et celle-ci hérite d'un sprite puis mon joueur peut avoir des armes, alors est-ce que je devrais créer une classe pour chacune de mes armes?

Et pour mes ennemis j'ai une classe ennemi puis une classe pour chaque sorte d'ennemi possible qui héritent de ennemi.

Est-ce que tu crois que c'est correct?

et puis je pourrais faire une liste de mes ennemis?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::RenderWindow draw
« Réponse #7 le: Septembre 13, 2013, 03:08:08 pm »
Il n'y a pas de design universel, c'est à toi de voir ce qui va le mieux selon ton application, selon tes compétences et selon ta façon de travailler. Et puis pour ce genre de chose, il vaut mieux expérimenter par soi-même pour s'améliorer.

Donc ne te pose pas (trop) de questions pour le moment, écris ton application, et reviens dessus quand tu auras suffisamment de recul, et que tu auras identifié les point négatifs de ta conception. Il est bien plus facile d'améliorer un design a posteriori qu'a priori ;)
Laurent Gomila - SFML developer

 

anything