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

Auteur Sujet: Problèmes RPG 2d affichage map (trucs bizarres, renderTexture?)  (Lu 1646 fois)

0 Membres et 1 Invité sur ce sujet

Tinei

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Bonjour, depuis quelque temps j'essaie de coder un petit RPG 2d en C++ avec la SFML, mais je suis malheureusement bloqué à cause d'un gros problème d'affichage: comme vous pouvez le voir sur les captures d'écran suivantes, des choses bizarres s'affichent sur le côté droit et le bas de la map:



Voici la fonction qui affiche les tuiles:
    void TileMap::draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        // on applique la transformation
        states.transform *= getTransform();

                sf::RenderTexture render;
                render.create(tileSize.x, tileSize.y);

                unsigned int nbrLayers = mapCouches.size();
                std::vector<sf::Sprite> couchesSprites;
                for(size_t layerActuel(0); layerActuel < nbrLayers; layerActuel++)              //Pour chaque couche disponible (layer)
                {
                        sf::Sprite uneCouche; uneCouche.setTexture(tileTexture);
                        couchesSprites.push_back(uneCouche);
                }

                //Préparation au calcul de la position des tuiles dans le tileset
                unsigned int nbrCasesParLigneTileset = tilesetWidth / tileSize.x;
                unsigned int nbrCasesParLigneMap = tailleMap.x / tileSize.x;

                //TEST
                std::ofstream fichier("map.txt", std::ios::out | std::ios::trunc);
                //

                unsigned int nbrCases = mapCouches[0].size();
                for(size_t i = 0; i < nbrCases; i++)                                                                            // Pour chaque case de la première couche
                {
                        //On définit la position du sprite représentant la case actuelle
                        unsigned int positionX(0);
                        unsigned int positionY(0);
                        computePosition(positionX, positionY, nbrCasesParLigneMap, i);
                        tiles->setPosition(positionX * tileSize.x, positionY * tileSize.y);
                                                       
                        for(size_t spriteActuel(0); spriteActuel < couchesSprites.size(); spriteActuel++)
                        {
                                if(mapCouches[spriteActuel][i] != -1)
                                {
                                        unsigned int positionXTileset(0);
                                        unsigned int positionYTileset(0);
                                        computePosition(positionXTileset, positionYTileset, nbrCasesParLigneTileset, mapCouches[spriteActuel][i]);
                                        couchesSprites[spriteActuel].setPosition(0,0);
                                        couchesSprites[spriteActuel].setTextureRect(sf::IntRect(positionXTileset * tileSize.x, positionYTileset * tileSize.y, tileSize.x, tileSize.y));
                                        render.draw(couchesSprites[spriteActuel]);
                                } else if(spriteActuel == 0)
                                {
                                        sf::Sprite sprite1; sprite1.setTexture(tileTexture); sprite1.setTexture(sf::Texture());
                                        sprite1.setColor(sf::Color::Black);
                                        render.draw(sprite1);
                                }
                        }
                       
                        render.display();
                        tiles->setTexture(render.getTexture());
                        target.draw(*tiles, states);
                        render.clear();
                        fichier << i << "; ";
                }
                //TEST
                fichier.close();
                //
    }
 

J'ai l'impression que c'est un problème de renderTexture, mais j'ai vérifié, je l'ai bien créé avec create(), et je n'ai pas oublié de faire display(), ni de faire clear().

Merci d'avance pour votre aide.
« Modifié: Août 29, 2015, 01:18:26 pm par Tinei »

DrPapino

  • Newbie
  • *
  • Messages: 34
    • Voir le profil
Re : Problèmes RPG 2d affichage map (trucs bizarres, renderTexture?)
« Réponse #1 le: Octobre 08, 2015, 06:47:40 pm »
À tout hasard, ça ne viendrait pas de

render.display();
tiles->setTexture(render.getTexture());
target.draw(*tiles, states);
render.clear();
?

Tu fais display, puis draw, puis clear. Moi jferais plutôt quelque chose du genre clear, draw, display.