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