Bien le bonjour à tous !
Très nouveau à SFML, je dois vous avouer que je suis déjà très satisfait
Bon, je suis en pleine phase d'apprentissage, donc j'espère que vous ne me trouverez pas trop idiot, mais j'ai un sacré souci. Je suis un tutoriel assez bien foutu sur Youtube d'un anglophone, et j'en suis actuellement à cette partie :
En gros il s'agit d'animer très basiquement une image en fonction des touches tapées au clavier. On a une texture en .png qu'on ajoute à un sprite. Sur cette texture figurent sur quatre lignes trois dessins d'un personnage au format 32x32 pixels.
Mon problème est simple : alors que je reproduis (enfin, je crois) scrupuleusement l'exemple donné sur le net, le résultat n'est pas le même. Je devrais, lorsque je tape la flèche de gauche, voir mon personnage "marcher" (il n'est pas encore question de le déplacer à l'écran) de profil, mais non, je reste bloqué sur un crop qui ne s'actualise pas...
Voilà le code en question :
void Moteur::boucleJeu()
{
while (m_fenetre->isOpen()) // Boucle de jeu
{
enum persoDirection { Bas, Gauche, Droite, Haut }; // Bas vaut 1, Gauche vaut 2, ...
sf::Vector2i source(1, Bas);
sf::Texture texturePersonnage; // Charge une texture
sf::Sprite spritePersonnage; // Charge un sprite
if (!texturePersonnage.loadFromFile("texturePersonnage.png")) {
std::cout << "Erreur : texturePersonnage ne s'est pas chargé." << std::endl;
}
/* On charge à partir du fichier */
spritePersonnage.setTexture(texturePersonnage); // On charge la texture dans le sprite
sf::Event event;
while (m_fenetre->pollEvent(event)) {
switch (event.type) {
case sf::Event::Closed:
m_fenetre->close();
break;
case sf::Event::KeyPressed:
if (event.key.code == sf::Keyboard::Up)
{
source.y = Haut;
std::cout << "Haut" << std::endl;
}
else if (event.key.code == sf::Keyboard::Down)
{
source.y = Bas;
std::cout << "Bas" << std::endl;
}
else if (event.key.code == sf::Keyboard::Left)
{
source.y = Gauche;
std::cout << "Gauche" << std::endl;
}
else if (event.key.code == sf::Keyboard::Right)
{
source.y = Droite;
std::cout << "Droite" << std::endl;
}
break;
default:
break;
}
}
source.x++;
if (source.x * 32 >= texturePersonnage.getSize().x) {
source.x = 0;
}
spritePersonnage.setTextureRect(sf::IntRect(source.x * 32, source.y * 32, 32, 32));
m_fenetre->draw(spritePersonnage); // On affiche le sprite à l'écran
m_fenetre->display();
m_fenetre->clear();
}
Peut-être cela est-il dû au fait que j'effectue toutes les opérations dans une classe ? J'ai sûrement mal conçu quelque chose.
Le main.cpp consiste à instancier une classe "Moteur" et à appeler les différentes fonctions, ici "boucleJeu()".
Que se passe-t-il ?
Merci à tous d'avance, et bravo pour le taff dingo !
PS : A titre d'information, je suis sur Xcode 4.5.2