Comment est déclaré le map mPixelToTile?
Un petit peu plus de code aiderait pour mieux xomprendre ce qui va pas
Bah, j'ai déjà donné la réponse hein ![Clin d'oeil ;)](https://www.sfml-dev.org/forums/Smileys/default/wink.gif)
Effectivement, et merci beaucoup !
![Délire :D](https://www.sfml-dev.org/forums/Smileys/default/cheesy.gif)
Cependant, rien ne s'affiche encore... Je cherche de mon côté, et voici le code si le concept (piqué au SdZ) vous intéresse ! (J’accepte aussi de l'aide et toute autre remarque, à préciser que le seul affichage est la couleur de fond de la fenêtre.
![Clin d'oeil ;)](https://www.sfml-dev.org/forums/Smileys/default/wink.gif)
)
/***** main.cpp *****/
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "TileMap.h"
int main(int argc, char *argv[])
{
// Initialisation
sf::RenderWindow Window(sf::VideoMode(1200, 800), "SFML Window", sf::Style::Default);
TileMap Map("TileSet.png", "PixelSet.png", "MenuMap.png");
// Boucle principale
while (Window.isOpen()) // Tant que la fenêtre est ouverte
{
sf::Event Event;
while (Window.pollEvent(Event)) // On récupère l'évènement suivant de la pile
{
if(Event.type == sf::Event::Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) // Si Escape est appuyée ou si la fenêtre est fermée
Window.close(); // Alors on ferme la fenêtre
}
Window.clear(sf::Color::Blue);
Window.draw(Map);
Window.display();
}
return EXIT_SUCCESS;
}
/***** TileMap.h *****/
#ifndef TILEMAP_H
#define TILEMAP_H
#include <SFML/Graphics.hpp>
#include <string>
#include <map>
class ColorComparaison {
public:
bool operator() (const sf::Color &left, const sf::Color &right) const
{
return (left.r + left.b + left.g) < (right.r + right.b + right.g); // Just histoire de faire le tri...
}
};
class TileMap : public sf::Drawable
{
public:
TileMap(const std::string &tile_set, const std::string &pixel_set, const std::string &pixel_map);
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states = sf::RenderStates::Default) const;
private:
sf::Image mPixelMap; // Carte sous forme d'image, contenant des pixel qui correspondent chacuns à un tile
std::map <sf::Color, sf::Texture, ColorComparaison> mPixelToTile; // Tableau de correspondance entre les pixels et les tiles
sf::Vector2i mTileSize; // Taille d'un tile
};
#endif // TILEMAP_H
/***** TileMap.cpp *****/
#include "TileMap.h"
TileMap::TileMap(const std::string &tile_set, const std::string &pixel_set, const std::string &pixel_map)
{
// On convertit les noms d'images en images
sf::Image mPixelMap;
sf::Image TileSet; // Alignement de tiles
sf::Image PixelSet; // L'alignement de pixel correspondant à celui de tiles
if( !(mPixelMap.loadFromFile(pixel_map) && TileSet.loadFromFile(tile_set) && PixelSet.loadFromFile(pixel_set)) ) // Chargement des images
exit(EXIT_FAILURE); // On termine le programme si une image n'est pas valide
// Taille d'un tile
sf::Vector2i mTileSize(TileSet.getSize().x / PixelSet.getSize().x, TileSet.getSize().y);
// On attribue chaque pixel à un tile, suivant l'odre des sets
for(unsigned int i = 0; i < PixelSet.getSize().x; i++) // Pour chacun des pixels...
mPixelToTile[PixelSet.getPixel(i, 0)].loadFromImage(TileSet, sf::IntRect(mTileSize.x * i, 0, mTileSize.x, mTileSize.y));
}
void TileMap::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
static sf::Sprite Drawer;
// On parcourt la carte de pixels
for(unsigned int x = 0; x < mPixelMap.getSize().x; x++)
for(unsigned int y = 0; y < mPixelMap.getSize().y; y++)
{
Drawer.setTexture(mPixelToTile.find(mPixelMap.getPixel(x, y))->second);
Drawer.setPosition(mTileSize.x * x, mTileSize.y * y);
target.draw(Drawer, states);
}
// Test :
static sf::Sprite Test;
Test.setColor(sf::Color::Green);
Test.setPosition(0, 0);
target.draw(Test, states); // Même cela ne s'affiche pas...
}
Merci à tous !
![Sourit :)](https://www.sfml-dev.org/forums/Smileys/default/smiley.gif)