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

Auteur Sujet: Porblème découpage / affichage sprite Personnage  (Lu 1777 fois)

0 Membres et 1 Invité sur ce sujet

Zyphoss

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
    • E-mail
Porblème découpage / affichage sprite Personnage
« le: Avril 06, 2015, 06:03:58 pm »
Salut, j'ai commencé à coder depuis 3 jours et j'ai commencé avec le sfml depuis 2 jours.
J'ai biensur suivi des tutos mais j'ai un problème d'affichage du sprite d'un personnage.
J'ai téléchargé une image (en 32x32) avec des sprites d'un perso (pièce jointe) et j'ai essayé de le mettre dans mon test de jeu. Donc j'arrive à mettre l'image, mais lors du découpage j'ai un bug avec les jambes qui continuent à s'étirer alors que je ne les veux pas (pièce jointe n°2). Voici le code de mon projet :

#include <SFML/Graphics.hpp>
#include <iostream>
#include <cstdlib>

void persoSprites();

sf::Event evenement;
sf::RenderWindow window;
sf::RectangleShape rectangle;
sf::Vector2i positionSouris;
sf::Texture perso;
sf::Sprite spritePerso;

int main()
{
    window.create(sf::VideoMode(1280,720), "Test"); //Création fenêtre
    window.setPosition(sf::Vector2i(0,0));
    window.setFramerateLimit(60);

    std::cout << "Lancement programme" << std::endl;

    persoSprites();

    if (window.isOpen())
    {
        std::cout << "lancement fenetre" << std::endl;
    }

    while (window.isOpen())
    {
        gestionClavier();
        gestionSouris();

        window.draw(spritePerso);
        window.draw(rectangle);
        window.display();
        window.clear();

        while (window.pollEvent(evenement))
        {
            if (evenement.type == sf::Event::Closed)
            {
                window.close();
                std::cout << "fermeture fenetre" << std::endl;

            }

        }
    }

    return 0;
}

et au niveau de mon perso :

void persoSprites()
{
    perso.setSmooth(true);
    perso.loadFromFile("Player.png");
    spritePerso.setTexture(perso);

    (perso.loadFromFile("Player.png", sf::IntRect(32, 0, 32, 32)));
}


Voilà j'espère que vous saurez régler mon problème car je n'ai pas envie de continuer mon projet en mettant des animations si le sprite ne veut même pas se mettre correctement...
Merci :D

PS : J'ai vu des gens qui mettaient leur code dans une fenêtre spéciale mais je ne sais pas comment faire :/
« Modifié: Avril 06, 2015, 06:23:06 pm par Zyphoss »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Porblème découpage / affichage sprite Personnage
« Réponse #1 le: Avril 06, 2015, 07:14:23 pm »
Dans ton cas là je crois que quand tu donnes ta texture à ton sprite, le sprite prend une certaine taille, et quand tu changes la texture en lui en filant une plus petite le sprite garde sa taille et étire les derniers pixels pour que ça rentre. Si le problème c'est ça tu pourrais le "corriger" en faisant un setTexture après l'avoir filée au sprite, en prenant soin de mettre à true le 2eme paramètre.
Je crois, je suis même pas sûr car comme le code est pas complet j'ai pas essayé.
void persoSprites()
{
    perso.setSmooth(true);
    perso.loadFromFile("Player.png", sf::IntRect(32, 0, 32, 32));
    spritePerso.setTexture(perso, true);
}

Quoi qu'il en soit, dans ton code tu charges 2 fois la texture à chaque appel de persoSprites(), une fois entière et une fois découpée. C'est évidemment inutile puisque tu pourrais la charger directement découpée.
Ensuite je ne sais pas si tu rappelles plusieurs fois cette fonction (j'imagine que oui mais le code n'est pas complet...) auquel cas tu chargerais plein de fois la même texture tout le temps. Charger une texture peut-être long, et étant donné que c'est tout le temps la même là c'est totalement inutile de la recharger à chaque fois.
Contente toi de la charger une seule fois en entier (sans la découper) puis d'effectuer le découpage au niveau du sprite avec sa fonction setTextureRect.

Si t'as commencé la programmation y'a 3 jours, tu ferais mieux de d'abord réellement apprendre le C++ / la programmation avant de te lancer sur SFML, ou alors tu risques fort de te heurter à des problèmes inutiles.
Pour mettre le code dans une "fenêtre spéciale", faut l'entourer des balises [code=cpp]ici mon code blabla[/code] ou alors tu utilises le bouton "code" (en sélectionnant c++ si c'est du c++) qui est sur la droite quand tu écris un message.

Zyphoss

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
    • E-mail
Re : Porblème découpage / affichage sprite Personnage
« Réponse #2 le: Avril 06, 2015, 07:24:30 pm »
Merci beaucoup de ton aide :D
J'ai bien tout modifié !
Je vais continuer de m’entraîner au c++ alors !