Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Versatis59

Pages: [1]
1
Graphique / Animation SFML en C++
« le: Novembre 26, 2016, 10:18:23 am »
Bonsoir, je suis actuellement entrain de coder un jeu en C++ avec SFML. J'ai un personnage (Sprite ninja), avec une animation, pour choisir l’animation. J'utilise une image avec étage 1 : Position fixe ; étage 2 : Courir.

Mais j'ai un problème, au lieu de m'afficher un carré de l'image et de changer d'image très rapidement, l'image défile de gauche à droite, je ne comprend pas pourquoi, voila le code : ( animation ligne 49 )

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

int main()
{
        // Création d'une fenêtre en SFML //
        RenderWindow window(VideoMode(800, 480, 32), "app");
        window.setFramerateLimit(60);
        window.setVerticalSyncEnabled(true);

        // Création des sprites //
        Texture backgroundTexture;
        Sprite background;
        Texture ninjaTexture;
        Sprite ninja;

        // Chargement des textures //
        if (!ninjaTexture.loadFromFile("graphics/ninja/final.png"))
        {
                cout << "Erreur durant le chargement de l'image de background." << endl;
        }
        else
        {
                ninja.setTexture(ninjaTexture);
                ninja.scale(0.3f, 0.3f);
                ninja.setPosition(300, 377);
        }

        if (!backgroundTexture.loadFromFile("graphics/background.png"))
        {
                cout << "Erreur durant le chargement de l'image de background." << endl;
        }
        else
        {
                background.setTexture(backgroundTexture);
                background.scale(0.5f, 0.5f);
        }

        // Animations //

        int frameTimer(4), frameNumber(0), frameMax(10), direction(0), w(363), h(329), etat(0);

        // Boucle principale du jeu //

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

                        if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                        {
                                etat = 1;
                                direction = 0;
                                w = (363);
                                h = (329);
                                ninja.move(4, 0);
                        }
                        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
                        {
                                etat = 1;
                                direction = 1;
                                w = (363);
                                h = (329);
                                ninja.move(-4, 0);
                        }
                        else if (!sf::Keyboard::isKeyPressed(sf::Keyboard::D) && !sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
                        {
                                etat = 0;
                                w = (232);
                                h = (329);
                        }
                }

                // Animations //
                if (frameTimer <= 0)
                {
                        frameTimer = 4;
                        frameNumber++;
                        if (frameNumber >= frameMax)
                        {
                                frameNumber = 0;
                        }
                }
                else
                {
                        frameTimer--;
                }
                if (direction == 1)
                {
                        ninja.setTextureRect(sf::IntRect(frameNumber * w, etat * h, -w, h));
                }
                else
                {
                        ninja.setTextureRect(sf::IntRect(frameNumber * w, etat * h, w, h));
                }

                // Affichage //
                window.clear();
                window.draw(background);
                window.draw(ninja);
                window.display();
        }

        // Fin //
        return 0;

}

Quelqu'un aurait t'il une piste pour m'aider à résoudre le problème ?

Merci d'avance.

Pages: [1]