Je dois actuellement créer un jeux 2d pour un projet de fin d'étude , et j'ai besoin de vous. Je code en c++ avec du SFML. Le problème est que je suis bloqué , je n'arrive pas a trouver des codes ou des explications qui fonctionnent afin de créer un fond d'écran . Sur le site SFML, j'ai vus que l'on peut utiliser des sprites , j'ai alors copié le code et télécharger la tile mais rien ne se passe . Sauriez vous m'aider car si je n'y arrive pas , je suis mal partit pour mon projet .
ps : Si vous avez des façons plus facile que le sfml pour le faire, ça me vas aussi , il faut juste que j'arrive a mettre un image même fixe afin de pouvoir continuer.
class TileMap : public sf::Drawable, public sf::Transformable { public: bool load(conststd::string& tileset, sf::Vector2u tileSize, constint* tiles, unsignedint width, unsignedint height) { // on charge la texture du tilesetif (!m_tileset.loadFromFile(tileset)) returnfalse; // on redimensionne le tableau de vertex pour qu'il puisse contenir tout le niveau m_vertices.setPrimitiveType(sf::Quads); m_vertices.resize(width * height * 4); // on remplit le tableau de vertex, avec un quad par tuilefor (unsignedint i = 0; i < width; ++i) for (unsignedint j = 0; j < height; ++j) { // on récupère le numéro de tuile courantint tileNumber = tiles[i + j * width]; // on en déduit sa position dans la texture du tilesetint tu = tileNumber % (m_tileset.getSize().x / tileSize.x); int tv = tileNumber / (m_tileset.getSize().x / tileSize.x); // on récupère un pointeur vers le quad à définir dans le tableau de vertex sf::Vertex* quad = &m_vertices[(i + j * width) * 4]; // on définit ses quatre coins quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y); quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y); quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y); quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y); // on définit ses quatre coordonnées de texture quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y); quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y); quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y); quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y); } returntrue; } private: virtualvoid draw(sf::RenderTarget& target, sf::RenderStates states) const { // on applique la transformation states.transform *= getTransform(); // on applique la texture du tileset states.texture = &m_tileset; // et on dessine enfin le tableau de vertex target.draw(m_vertices, states); } sf::VertexArray m_vertices; sf::Texture m_tileset; };
Et maintenant, l'application qui l'utilise :
int main() { // on crée la fenêtre sf::RenderWindow window(sf::VideoMode(512, 256), "Tilemap"); // on définit le niveau à l'aide de numéro de tuilesconstint level[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 1, 0, 0, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 1, 0, 3, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0, 2, 0, 1, 0, 3, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 3, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, }; // on crée la tilemap avec le niveau précédemment défini TileMap map; if (!map.load("tileset.png", sf::Vector2u(32, 32), level, 16, 8)) return -1; // on fait tourner la boucle principalewhile (window.isOpen()) { // on gère les évènements sf::Event event; while (window.pollEvent(event)) { if(event.type == sf::Event::Closed) window.close(); } // on dessine le niveau window.clear(); window.draw(map); window.display(); } return0; }
Je ne sais pas pourquoi ca c'est mis comme ca mais bon regarde ici :
https://www.sfml-dev.org/tutorials/2.1/graphics-vertex-array-fr.php
Oula ça va être compliqué de s'y retrouver ^^. Mais j'peux pas t'en vouloir, l'éditeur du forum semble complètement pété (du moins de mon côté).
Tout ce que je peux te dire c'est que pour une TileMap tu n'as pas de raison particulières d'utiliser les Vertex. Là clairerement tu te compliques la vie.
Dans ce cas le seul truc que je puisse te conseiller c'est de t'exercer, c'est pas que je ne veuille pas t'aider hein, mais si tu as déjà des doutes avec ce bout de code c'est qu'il te manque certaines bases (C++ ? SFML ?).
Les mini tutos sur le site de la SFML sont plutôt simples et clairs. Exerce toi à planter un clou avant de construire une maison .
Après attention, le bout de code que je t'ai donné c'est juste pour initialiser et placer des rectangles/sprites sous forme de grille. Derrière il y a encore un peu de boulot pour créer un système de TileMap.
Puis là à part copier-coller le code de la SFML et dire que tu n'arrivais pas à le faire fonctionner, tu n'as pas montré ton code et tu n'as pas dis non plus ce que tu ne comprenais pas exactement.
Que l’obscurantisme retourne à l'obscurité.... Tchao
C++ : Aide pour mettre un image en fond
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
...
...
...
...
...
...
Que l’obscurantisme retourne à l'obscurité.... Tchao