Je suis en train de creer un moteur de jeu avec la sfml pour des jeux en 2d mais j'ai un probleme de concernant les tiles. C'est assez bizarre en faite😅. Je vous donne le code et je vous explique
mon code :
Map.cpp
#include "Map.h"
#include <fstream>
Map::Map(std::string const& tileSetPath) : m_tileSet(), m_array_map(), m_imageTileSet()
{
if (m_imageTileSet.loadFromFile(tileSetPath.c_str()))
{
m_tileSet.loadFromImage(m_imageTileSet);
}
else
{
std::cout << "Erreur chargement tuiles";
}
}
void Map::loadMapFromFile(std::string const & filepath)
{
char a;
std::ifstream fichier("nivo/"+filepath+".txt");
if (fichier)
{
for (int i(0); i < NOMBRE_BLOCS_HAUTEUR; i++)
{
for (int j(0); j < NOMBRE_BLOCS_LARGEUR; j++)
{
fichier.get(a);
if (a != 10)
{
m_array_map[i][j] = a - 48;
}
}
}
}
for (int i(0); i < NOMBRE_BLOCS_HAUTEUR; i++)
{
for (int j(0); j < NOMBRE_BLOCS_LARGEUR; j++)
{
std::cout << m_array_map[i][j] << "|";
}
}
}
void Map::drawMap(sf::RenderWindow & window)
{
sf::Sprite sprite_tile;
sprite_tile.setTexture(m_tileSet);
std::cout << std::endl << std::endl;
for (int i(0); i < NOMBRE_BLOCS_HAUTEUR; i++)
{
for (int j(0); j < NOMBRE_BLOCS_LARGEUR; j++)
{
std::cout << m_array_map[i][j] << "|";
sprite_tile.setPosition(sf::Vector2f(float(i*32), float(j*32)));
sprite_tile.setTextureRect(sf::IntRect(m_array_map[i][j] * 32, 0, 32, 32));
window.draw(sprite_tile);
}
}
}
Et la ça marche bien ( pour l'instant ) mais je voudrais pouvoir mettre les saut de ligne car meme si c'est pour un editeur de jeu je voudrais que si jamais je dois aller modifier manuellement la map ben je puisse donc que dois-je faire
EDIT : Ce code ne vient pas exclusivement de moi je l'ai pris sur internet (je crois sur ce forum) et je l'ai modifie
- Edité par samuel | coopyso 15 août 2018 à 13:58:15
Si tu peux, ou alors tu ne comprends pas ce que tu fais.
Tu as fait une autre erreur, c'est que tu continues d'avancer dans ta matrice même si le caractère lu est invalide. Du coup tout se décale. Cela fonctionne chez moi :
fichier.get(a);
while(a < 48 || a > 57)
{
fichier.get(a);
}
m_array_map[i][j] = a - 48;
Cela doit t'afficher des 0, 1, 2 pas des 48 49 50.
Ensuite niveau optimisation, tu dois changer la manière dont tu stockes tes données. Tu fais comment si tu as plus de 10 tiles différentes ?
Le pire du pire c'est que tu crées tous les sprites et tu calcules leurs positions sur la fenêtre et sur la texture à chaque frame ! C'est de la folie niveau optimisation.
Et pourquoi diable passer par une sf::Image pour charger ta texture ? Ca c'est un gaspillage énorme aussi.
Merci je vais tester ce que tu m'a dit ça me sauve car qt j'aime bien mais j'aurais preferer ne pas l'utiliser et surtout car il marche pas tres bien on m'a dit sous vs 2017 donc merci
[SFML] Tile mapping
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html