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

Auteur Sujet: [RESOLU]setTextureRect m'affiche toute la sprite sheet  (Lu 1641 fois)

0 Membres et 1 Invité sur ce sujet

toto012

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
    • E-mail
[RESOLU]setTextureRect m'affiche toute la sprite sheet
« le: Septembre 15, 2013, 07:00:35 pm »
Bonjour a tous,

J'ai un gros problème avec setTextureRect.
Voila le code :
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <windows.h>
#include <sstream>
#include <iostream>
#include <fstream>
#include <string.h>

using namespace sf;
using namespace std;

string intToStr(int aConv)
{
    ostringstream oss;
    oss << aConv;
    string result = oss.str();

    return result ;
}

int main()
{
    RenderWindow app(sf::VideoMode(800, 600), "Dafukaaa window !!!");
    app.setFramerateLimit(60);

    Font textFont;
    textFont.loadFromFile("coolvetica.ttf");

    Text textCpt;
    textCpt.setFont(textFont);
    textCpt.setPosition(Vector2f(500,200));

    Image imgPlr;
    imgPlr.loadFromFile("img/ninja.png");
    imgPlr.createMaskFromColor(Color(255,0,252));

    Texture texPlr;
    texPlr.loadFromImage(imgPlr);

    Sprite srtPlr;
    srtPlr.setTexture(texPlr);
    srtPlr.setTextureRect(IntRect(42,222,109,390));
    srtPlr.setScale(Vector2f(0.5f,0.5f));

    cout << "Jeu : Initialisation terminee" << endl;


    int cptAnim = 0, cptAnim2 = 0;

    // orient = false = droite, true = gauche
    bool orient = true;

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

        if(orient == false) // Droite
        {
            switch(cptAnim)
            {
            case 0 :
                srtPlr.setTextureRect(IntRect(33,222,109,390));
                break;
            case 1 :
                srtPlr.setTextureRect(IntRect(140,226,253,394));
                break;
            case 2 :
                srtPlr.setTextureRect(IntRect(290,220,383,388));
                break;
            case 3 :
                srtPlr.setTextureRect(IntRect(425,217,525,385));
                break;
            }
        }
        else if(orient == true) // Gauche
        {
            switch(cptAnim)
            {
            case 0 :
                srtPlr.setTextureRect(IntRect(24,9,99,177));
                break;
            case 1 :
                srtPlr.setTextureRect(IntRect(135,9,229,177));
                break;
            case 2 :
                srtPlr.setTextureRect(IntRect(290,9,384,177));
                break;
            case 3 :
                srtPlr.setTextureRect(IntRect(438,9,522,177));
                break;
            }
        }


        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
            srtPlr.move(Vector2f(- 5, + 0));
            if(orient == false){
                orient = true;
                cout << "Jeu : Orientation gauche" << endl;
            }
        }

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
            srtPlr.move(Vector2f(+ 5, + 0));
            if(orient == true){
                orient = false;
                cout << "Jeu : Orientation droite" << endl;
            }
        }

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            srtPlr.move(Vector2f( + 0, - 5));

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            srtPlr.move(Vector2f(+ 0, + 5));

        cptAnim2 ++;

        if(cptAnim2 == 50) // 10 = Intervall
        {
            cptAnim ++;
            cptAnim2 = 0;
        }

        if(cptAnim == 4)
            cptAnim = 0;

        textCpt.setString(intToStr(cptAnim));

        app.clear(Color(0,255,0,255));

        app.draw(srtPlr);
        app.draw(textCpt);

        app.display();

    }


    return 0;
}

 

Le problème est que au fur et a mesure que le cptAnim s'incrémente et affiche l'animation du sprite voila ce que ca donne :

cptAnim = 0:


cptAnim = 1:


cptAnim = 2 :


cptAnim = 3:


La sprite sheet:


Comme vous l'avez vu :
- Un rectangle blanc apparaît
- Au cptAnim = 0, c'est normal
- Au cptAnim = 1, il y a l'animation 1 et 2 du sprite
- Au cptAnim = 2, il y a l'animation 2 et 3 du sprite
- Au cptAnim = 3, il y a l'animation 3 du sprite

Moi je voulais juste une animation normale.
Si vous pourriez m'aider ca serait gentil !

Merci d'avance  :)
« Modifié: Septembre 17, 2013, 07:58:36 pm par toto012 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : setTextureRect m'affiche toute la sprite sheet
« Réponse #1 le: Septembre 15, 2013, 08:34:57 pm »
Relis attentivement la documentation du constructeur de sf::IntRect.
Laurent Gomila - SFML developer

toto012

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
    • E-mail
Re : setTextureRect m'affiche toute la sprite sheet
« Réponse #2 le: Septembre 15, 2013, 10:09:25 pm »
Merci pour cette réponse rapide :)

C'etait bien ca le probième : je croyais que ca n'avais pas changé de la 1.6 a la 2.0(2.1)

Merci encore !