Bonjour,
j'essaye d'afficher une carte en Tilemap, mais le programme plante lors de l'affichage (pas de problèmes lors de la compilation). Je pense que le problème viens lorsque je fait ma boucle dans Carte::draw, mais je n'arrive pas a trouver pourquoi
carte.cpp
#include <iostream>
#include <string>
#include <vector>
#include "Carte.h"
using namespace std;
using namespace sf;
Carte::Carte() {}
Carte::Carte(string lvlname) {
if (!m_carte.loadFromFile(lvlname + ".png")) { cout << "Erreur chargement : carte" << endl; }
if (!m_textures.loadFromFile(lvlname + "textures.bmp")) { cout << "Erreur chargement : textures" << endl; }
int m_mapx (m_carte.getSize().x);
int m_mapy (m_carte.getSize().y);
cout << "m_mapx vaut :" << m_mapx << endl;
cout << "m_mapy vaut :" << m_mapy << endl;
vector <vector <Square> > m_tabText(m_mapx);
for (int i (0); i < m_mapx; i++) {
for (int j (0); j < m_mapy; j++) {
m_tabText[i].push_back(Square(attributionText(i, j), m_textures, i, j));
}
}
}
Carte::~Carte() {}
int Carte::attributionText(int x, int y) {
if (m_carte.getPixel(x, y) == Color::Black) {return 0;}
else if (m_carte.getPixel(x, y) == Color::Red) {return 1;}
else if (m_carte.getPixel(x, y) == Color::Green) {return 2;}
else if (m_carte.getPixel(x, y) == Color::Blue) {return 3;}
cout << "Mauvaise attribution de texture" << endl; return 3;
}
void Carte::draw(RenderWindow* app) {
for (int i (0); i < m_mapx; i++) {
for (int j (0); j < m_mapy; j++) {
m_tabText[i][j].draw(app);
}
}
}
carte.h
#include <string>
#include <vector>
#include <SFML/Graphics.hpp>
#include "Square.h"
class Carte {
public:
Carte();
Carte(std::string lvlname);
~Carte();
void draw(sf::RenderWindow* app);
private:
int attributionText(int i, int j);
std::string m_lvlname;
std::vector <std::vector <Square> > m_tabText;
sf::Image m_carte;
sf::Texture m_textures;
sf::Sprite m_sprite;
int m_numTexture;
int m_mapx;
int m_mapy;
int m_tabColor;
int m_nbColor;
};
square.cpp
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Square.h"
using namespace std;
using namespace sf;
Square::Square() {}
Square::Square(int numTexture, sf::Texture& textures, int x, int y) {
m_sprite.setTexture(textures);
m_sprite.setTextureRect(IntRect(50*numTexture, 1, 50, 50));
m_sprite.setPosition(Vector2f(50*x, 50*y));
}
Square::~Square() {}
void Square::draw(RenderWindow* app) { app->draw(m_sprite); }
square.h
#include <string>
#include <vector>
#include <SFML/Graphics.hpp>
class Square {
public:
Square();
Square(int numTexture, sf::Texture& textures, int x, int y);
~Square();
void draw(sf::RenderWindow* app);
private:
sf::Texture m_textures;
sf::Sprite m_sprite;
int m_numTexture;
int m_x;
int m_y;
};
#endif
J'ai fait une classe square (google.trad de "case", pas sur que se soit ce qu'il y ai de mieux) car j'aimerai faire un T-RPG, donc je vais avoir besoin de savoir si il y a déjà quelqu'un dessus, combien cela coûte en déplacement pour passer par cette case, etc...
Merci d'avance pour vos réponses.