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

Auteur Sujet: Tile mapping problème  (Lu 2627 fois)

0 Membres et 1 Invité sur ce sujet

Faren

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Tile mapping problème
« le: Septembre 20, 2013, 05:07:23 pm »
  Bonjour,

J'essaie de créer une map en 2D d'après un fichier texte.
Mon programme lit très bien le fichier, mais il ne le dessine pas dans la fenêtre, je ne sais pas où est le problème.
Je précise que mon code compile sans problème.
main.cpp

int main()
{
    sf::RenderWindow window(sf::VideoMode(400, 400), "SFML works!");
    const float speed =100;
    sf::Clock clock;
    sf::Texture *tPerso=new sf::Texture;
    int carte[200][200];

    sf::Sprite *sPerso=new sf::Sprite;
    sf::Image *iPerso=new sf::Image;

    MapManager niveau;
    niveau.lectureNiveau(carte);



    while (window.isOpen())
    {
        sf::Event event;
        float elapsed = clock.restart().asSeconds();

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



        }



if(sf::Event::KeyPressed)
                {
                   

                  }

        window.clear(sf::Color::White);
        niveau.initSprites(carte,window);
        window.draw(*sPerso);
        window.display();


                }

delete  iPerso;
delete  tPerso;
delete  sPerso;


        return 0;
    }






 

MapManger.cpp:
#include "MapManager.h"

MapManager::MapManager()
{

}



void MapManager::initSprites(int carte[][TAILLE],sf::RenderWindow &fenetre)
{
int tailleX;
int tailleY;
int i=0;
int j=0;


if(iTiles.loadFromFile("tileSet.jpg")) //Chargement Images
{
  tailleX= iTiles.getSize().x/3;
   tailleY= iTiles.getSize().y/5;
   tTiles.loadFromImage(iTiles);
   sTiles1.setTexture(tTiles);
   sTiles2.setTexture(tTiles);
   sTiles3.setTexture(tTiles);
   sTiles4.setTexture(tTiles);
   sTiles5.setTexture(tTiles);


    for(i=0;i<6;i++)
 {
    for(j=0;j<9;j++)
   {

        switch(carte[i][j])
    {
    case 1:
           sTiles1.setTextureRect(sf::IntRect(0,0,tailleX,tailleY));
           sTiles1.setPosition(j*tailleX,i*tailleY);
           fenetre.draw(sTiles1);

        break;
    case 2:
           sTiles2.setTextureRect(sf::IntRect(tailleX,0,2*tailleX,tailleY));
           sTiles2.setPosition(j*tailleX,i*tailleY);
           fenetre.draw(sTiles2);

        break;
    case 3:
           sTiles3.setTextureRect(sf::IntRect(2*tailleX,0,3*tailleX,tailleY));
           sTiles3.setPosition(j*tailleX,i*tailleY);
           fenetre.draw(sTiles3);

        break;
    case 4:
           sTiles4.setTextureRect(sf::IntRect(0,tailleY,tailleX,2*tailleY));
           sTiles4.setPosition(j*tailleX,i*tailleY);
           fenetre.draw(sTiles4);

        break;
    case 5:
           sTiles5.setTextureRect(sf::IntRect(tailleX,tailleY,2*tailleX,2*tailleY));
           sTiles5.setPosition(j*tailleX,i*tailleY);
           fenetre.draw(sTiles5);

        break;
    default:
        break;

    }

   }


 }
}
else{cout << "Erreur chargement Image tileSet.png"<<endl;}


}
 

MapManager.hpp
#ifndef MAPMANAGER_H_INCLUDED
#define MAPMANAGER_H_INCLUDED


#include <iostream>
#include <fstream>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#define TAILLE 200

using namespace std;

class MapManager

{
public:

MapManager();
void lectureNiveau(int carte[][TAILLE]);
void initSprites(int carte[][TAILLE],sf::RenderWindow &fenetre);



private:

sf::Image iTiles;
sf::Texture tTiles1;
sf::Sprite sTiles1;
sf::Texture tTiles2;
sf::Sprite sTiles2;
sf::Texture tTiles3;
sf::Sprite sTiles3;
sf::Texture tTiles4;
sf::Sprite sTiles4;
sf::Texture tTiles5;
sf::Sprite sTiles5;


};




#endif // MAPMANAGER_H_INCLUDED
 
« Modifié: Septembre 20, 2013, 08:32:58 pm par Faren »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Tile mapping problème
« Réponse #1 le: Septembre 20, 2013, 05:27:28 pm »
Quand on a un gros truc qui marche pas, on essaye de le simplifier au maximum pour isoler l'erreur, plutôt que de fixer un gros morceau de code pendant des heures en espérant trouver l'erreur ;)
Laurent Gomila - SFML developer

Faren

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Tile mapping problème
« Réponse #2 le: Septembre 20, 2013, 07:16:15 pm »
Je pense que l'erreur vient de ma fonction initSprites mais je sais pas où précisément.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Tile mapping problème
« Réponse #3 le: Septembre 20, 2013, 08:14:01 pm »
Hmm... Mais pourquoi est-ce que tu découpes ton image en plusieurs textures ? C'est juste le contraire de ce qu'il faut faire ;)
Laurent Gomila - SFML developer

Faren

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Tile mapping problème
« Réponse #4 le: Septembre 20, 2013, 08:33:55 pm »
Voilà j'ai modifié, mais ça ne marche toujours pas.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Tile mapping problème
« Réponse #5 le: Septembre 20, 2013, 09:35:05 pm »
Essaye de simplifier ton code, utilise ton debugger, fais une exécution pas à pas, vérifie les variables intermédiaires, ... essaye de faire des trucs pour avancer. Là on dirait que tu n'as aucun indice quant à l'origine du bug. Avec un minimum de boulot je pense que tu peux réduire le champ d'investigation à quelque chose que l'on puisse examiner facilement.
Laurent Gomila - SFML developer

Faren

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Tile mapping problème
« Réponse #6 le: Septembre 20, 2013, 09:58:57 pm »
Le problème venait de la lecture du fichier, en faite il lisait la ligne entière puis le mettait dans mon tableau c'est pour cela que rien ne s'affichait.
De plus j'ai fait une erreur d'inattention en effet les sprites s'affichaient après à l'envers (j'avais inversé lignes et colonnes du tableau).
Donc maintenant mes sprites s'affichent.

Merci encore pour ton aide

 

anything