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

Auteur Sujet: Problème affichage sprite  (Lu 2475 fois)

0 Membres et 1 Invité sur ce sujet

Dust

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Problème affichage sprite
« le: Octobre 13, 2016, 11:11:51 am »
Bien le bonjour,
Habituellement je trouve mes réponses tout seul, mais la je ne suis même pas capable d'expliquer pleinement le problème  :(
N'hésitez pas à me reprendre, je manque énormément de vocabulaire en informatique.

BREF!

Je tente de faire un pong. Pour cela j'ai créer une classe "Barre" :
class Bar : public sf::Sprite
{
public:
    Bar(float x, float y, sf::Texture &t);

    void setTeam(int i);
    void moveX(int x);
    int getTeam()const;

private:
    int team;
};
J'ai également un objet "Graphisme" qui est la pour gérer une bonne partie de mon merdier programme. Dans cet objet ce trouvent les vector qui contiennent les barres, bouton, et autres :
std::vector<Bar> v_bar;
std::vector<Ball> v_ball;
std::vector<Button> v_button;

DONC:

Si la texture de ma barre s'affiche très bien quand il est créer depuis le main, il n'en est pas de même pour ceux qui habitent (ce n'est définitivement pas le bon terme  :-[) ma classe graphique. Et c'est la le problème...
Je suppose que je ne vais pas mettre tout mon programme... Vous avez besoins de quoi pour m'aider?

dans le doute je rajoute le main :
(click to show/hide)
ainsi que les éléments de ma classe graphique :
(click to show/hide)
merci d'avance :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème affichage sprite
« Réponse #1 le: Octobre 13, 2016, 11:39:26 am »
Puisque le problème concerne l'affichage de la barre, il faudrait voir sa création et son dessin.

Il y a de grandes chances que ton problème soit lié à cela :
http://www.sfml-dev.org/tutorials/2.4/graphics-sprite-fr.php#le-problcime-du-carrce-blanc
Laurent Gomila - SFML developer

Dust

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème affichage sprite
« Réponse #2 le: Octobre 13, 2016, 12:11:26 pm »
Merci pour la rapidité de votre réponse  :D

Concernant le "Le problème du carré blanc" :
j'avais créer une entité texture dans ma classe Graphics, elle est chargée dès le début. J'ai également fait quelques test supplémentaire à coup de "cout".
Graphics::Graphics()
{
    texture.loadFromFile("textures.bmp");
    font.loadFromFile("Fixedsys500c.ttf");
    refresh = false;

    clientConnected=false;
    listen.setBlocking(false);
    for(int i = 0; i < 4; i++)socket[i].setBlocking(false);
    cPlayer = 0;

    setPhase(0);

    //TEST
    v_bar.push_back(Bar(50,50,texture));
    //====
}
void Graphics::draw(sf::RenderWindow &win)
{
    for(int i = 0; i < v_button.size();i++)
    {
        win.draw(v_button.at(i));
    }
    for(int i = 0; i < v_ball.size();i++)
    {
        win.draw(v_ball.at(i));
    }
    for(int i = 0; i < v_bar.size();i++)
    {
        win.draw(v_bar.at(i));

        //TEST
        cout << v_bar.at(i).getTexture()->getMaximumSize() << endl;
        cout << v_bar.at(i).getTextureRect().width << " " << v_bar.at(i).getTextureRect().height << endl;
        cout << v_bar.at(i).getLocalBounds().width << " " << v_bar.at(i).getLocalBounds().height << endl;
        //====
    }
}

les "cout" me disent :
16384
90 20
90 20

Du coup, j’imagine que ce n'est pas de la que viens le problème. A moins que j'ai tout mal compris  ??? je m'en remet à votre jugement  :-\

Aurais-ce un lien avec sf::RenderStates? C'est un élément que j'ai encore pas mal de difficultées à appréhender  :-[
« Modifié: Octobre 13, 2016, 12:14:02 pm par Dust »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème affichage sprite
« Réponse #3 le: Octobre 13, 2016, 12:20:23 pm »
Citer
Du coup, j’imagine que ce n'est pas de la que viens le problème
En effet, tout m'a l'air bon.

Citer
Aurais-ce un lien avec sf::RenderStates?
Non, tu n'as pas à t'occuper de ça. Ca sert uniquement pour passer des options "avancées" de dessin.

Quand tu dis que la texture ne s'affiche pas, c'est blanc ou bien il n'y a rien du tout ? Peut-on voir la définition du constructeur de Bar ?

PS : écris donc tes boucles comme ça, c'est plus sympa :
for (auto ball : v_ball)
    win.draw(ball);
Laurent Gomila - SFML developer

Dust

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème affichage sprite
« Réponse #4 le: Octobre 13, 2016, 12:31:47 pm »
Quand tu dis que la texture ne s'affiche pas, c'est blanc ou bien il n'y a rien du tout ?
Il m'affiche un rectangle rouge de 90x sur 20y, il est affiché à 50x, 50y du bord supérieur gauche.

Peut-on voir la définition du constructeur de Bar ?
Pour sûr! :D
 Bar::Bar(float x, float y, sf::Texture &t)
 {
     setTexture(t);
     setPosition(x,y);
     setTeam(0);
 }
Dans le doute je met aussi le setTeam :
void Bar::setTeam(int i)
{
     if(i >= 0 && i < 4)
     {
         setTextureRect(sf::IntRect(0,20*i,90,20));
         team = i;
     }
}
PS : écris donc tes boucles comme ça, c'est plus sympa :
Merci, je connaissais pas ce raccourci ;D

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème affichage sprite
« Réponse #5 le: Octobre 13, 2016, 12:58:48 pm »
Pourquoi rouge ? Tu as un setColor quelque part ? On peut voir la texture ?
Laurent Gomila - SFML developer

Dust

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Problème affichage sprite
« Réponse #6 le: Octobre 13, 2016, 01:08:23 pm »
Aucun setColor nul part, j'ai appris par le passé et à mes dépends que modifier la couleur du sprite modifiait beaucoup de chose :-\
Du coup j'ai vérifié et la couleur de Bar est de 255,255,255.

Voila la texture, le rouge affiché me semble identique au contour rouge de la première barre.
« Modifié: Octobre 13, 2016, 01:10:03 pm par Dust »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème affichage sprite
« Réponse #7 le: Octobre 13, 2016, 01:18:17 pm »
Citer
j'ai appris par le passé et à mes dépends que modifier la couleur du sprite modifiait beaucoup de chose
Hmm... non pas vraiment :P

Citer
Voila la texture, le rouge affiché me semble identique au contour rouge de la première barre.
En effet c'est plausible.

Du coup désolé mais je ne vois pas. Essaye de reprendre la logique d'init et d'affichage de ta barre depuis zéro dans un environnement vierge, et rajoute les choses petit à petit. Tu vas forcément croiser le problème en chemin.
Laurent Gomila - SFML developer

Dust

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème affichage sprite
« Réponse #8 le: Octobre 13, 2016, 01:43:47 pm »
D'accord, je vais re-recommencer :-\
En y allant test par test je finirais bien par voir ou est le problème... j’imagine...
Mais en y repensant : si je crée ma Barre dans mon main tout fonctionne, donc en théorie je devrais étudier les relations entre Graphique et Bar pour voir ou est le problème.

la texture est chargée dans le constructeur. Elle reste inchangée par la suite... et les seules autres fois ou cette variable apparait c'est en 3e argument pour créer une nouvelle Barre. Et les getTexture sur Barre me disent qu'elle trouve bien ma texture.

mes seules façon de modifier mes Barres sont via les fonctions setTeam(int i) et moveX(int x), je n’appelle que la 1e et elle fonctionne dans le main, me permettant de changer à ma guise la couleur de la barre.

donc la texture est OK, la modif : OK, il ne reste que l'affichage. J'ai donc probablement foiré un truc dans Graphics::draw(sf::RenderWindow &win);

je pourrais tenter de renvoyer des pointeurs de mes Barres dans la boucle principale... ou rendre dessinable Graphique... ou bien j'arrête avec mes textures, après tout, mon but de base était un test sur les fonctions liées au réseaux -_-"

Je recommencerais quand j'aurais fini d'explorer les dernières idées que j'ai eu pendant la dernière heure :P

Bref, merci de m'avoir accordé de votre temps et de votre support ;D bonne journée à vous  ;)

edit : en faisant en sorte que Graphique puisse être dessiné (class Graphics : public sf::Drawable) j'ai réussi à changer les couleurs : quand je fais un setTeam(int i) la couleur change maintenant.
Bon elle change... j'ai plus l'impression qu'elle prend le pixel supérieur gauche de son nouveau découpage et l'applique au reste :P mais c'est déjà bcp mieux du coup
« Modifié: Octobre 13, 2016, 01:55:15 pm par Dust »