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

Auteur Sujet: Changement de textures  (Lu 2535 fois)

0 Membres et 2 Invités sur ce sujet

Savitruc

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Changement de textures
« le: Juillet 01, 2016, 09:22:38 pm »
Bonjour à tous,
J'essaie d'animer sommairement un sprite pour comprendre la manière d'opérer. Après plusieurs essais infructueux où les textures ne s'affichaient pas correctement, j'ai décidé d'ouvrir un post parce que je deviens fou à chercher mon erreur.
Voici la situation: ici, on essaye d'animer les flammes qui sortent du réacteur de l'avion. Toutes les textures sont sur une seule image en .png et tout les sprites du joueur utilisent cette texture avec des rectangles de sélection différents.
Voici l'image, les deux textures que l'on veut utiliser successivement sont les deux de la première colonne de gauche.

Afin de ne pas surcharger, je ne vais copier que les éléments se rapportant au sprite concerné.

        sf::Sprite playerTopFlames;

        playerTopFlames.setTexture(texture);

        playerTopFlames.setTextureRect(sf::IntRect(1,3,11,5));





        if(frames<120)
        {
            frames++;
        }
        else
        {
            frames=0;
            if(state==0)
            {
                playerTopFlames.setTextureRect(sf::IntRect(4,13,8,5));
                state=1;
            }
            else
            {
                playerTopFlames.setTextureRect(sf::IntRect(1,3,11,15));
                state=0;
            }
        }
        if(state==1)
        {
            playerTopFlames.setPosition(SpritePos.x-50, SpritePos.y+10);
        }
        else
        {
            playerTopFlames.setPosition(SpritePos.x-8, SpritePos.y+10);
        }
        window.draw(playerTopFlames);
        window.draw(player);

On change tout simplement le rectangle que le sprite montre et donc la position du sprite à un intervalle donné, compté ici en frame.
Sauf que le problème est sensiblement le même qu'avec les autres méthodes que j'ai testées (changer la texture au lieu de l'actualiser, par exemple, en travaillant avec deux textures), le premier affichage fonctionne:

Puis, alors que je peux jurer avoir vérifier les coordonnées 20 fois, le sprite s'actualise, mais est mal placé:

Et enfin, les deux textures fusionnent.

Et on alterne entre l'avant-dernière et la dernière image.
Je ne comprends pas du tout ce que je fais de mal et j'apprécie tout aide.
Merci!

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Changement de textures
« Réponse #1 le: Juillet 02, 2016, 01:10:56 am »
Citer
playerTopFlames.setTextureRect(sf::IntRect(1,3,11,15));
15 pixels de hauteur ? J'en doute.

J'ai pas vraiment compris tes 2 setPosition, pourquoi -50 ?

Savitruc

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : Changement de textures
« Réponse #2 le: Juillet 02, 2016, 11:44:39 am »
Après 20 (vraies) relectures du code et autant de modifications de celui-ci, j'ai effectivement mal rempli ce IntRect parce que je me suis complètement emmêlé les pinceaux en lisant la grille de mon image, je sens que je vais me faire mal, désolé pour ça.
Déjà la texture ça marche, donc c'est cool, mais son positionnement n'est toujours pas correct par contre, le -50 (la valeur que je veux vraiment utiliser est -5) était là pour vérifier que quelle que soit la valeur que l'on donne, -50, -5 ou autre, la petite flamme sera toujours positionnée au même endroit, ce qui n'est pas normal.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Changement de textures
« Réponse #3 le: Juillet 02, 2016, 02:35:51 pm »
Je pense qu'il y a pas assez de vrai code pour dire pourquoi la flamme ne change pas de position.
Sinon tu donnes la même largeur à tes 2 TextureRect (car à gauche de la petite il n'y a rien) comme ça t'auras même pas besoin de changer sa position entre 2 flammes.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Changement de textures
« Réponse #4 le: Juillet 02, 2016, 05:41:26 pm »
Citer
Sinon tu donnes la même largeur à tes 2 TextureRect (car à gauche de la petite il n'y a rien) comme ça t'auras même pas besoin de changer sa position entre 2 flammes.
Ou alors tu mets l'origine (setOrigin) à droite au milieu du sprite de flamme. Ce sera encore plus facile à placer relativement au vaisseau.
Laurent Gomila - SFML developer

Savitruc

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : Changement de textures
« Réponse #5 le: Juillet 03, 2016, 10:08:29 am »
J'avais encore fais une erreur que j'ai corrigé (une ligne de setPosition() en trop), je m'excuse, je vais vraiment faire plus attention à partir de maintenant. Sinon les méthodes que vous avez proposées rendent le travail encore moins compliqué, merci beaucoup!
« Modifié: Juillet 03, 2016, 10:11:59 am par Savitruc »