Bonjour à tous
Je travaille sur un projet de Tile Mapping (oui je sais c'est pas original xD)
J'essaye que chacune de mes Tiles puissent gérer 3 couches de rendus, (plus facile pour gérer les Collisions de dire que la Tile entière entraîne une collision)
Mes tiles sont contenus dans ma classe Zone, et les Zones sont contenues dans ma classe World
Le World a donc un fonction draw comme ça :
void World::draw()
{
mApp.setView(mWorldView);
mActualZone->draw(mApp, Layer::Sol);
mApp.sf::RenderTarget::draw(mSceneGraph); // mApp est de type Application qui hérite de pas mal de trucs dont plusieurs fonctions draw --> Je sais c'est pas tip-top...
}
Ensuite une zone se dessine comme ça :
void Zone::draw(sf::RenderWindow& window, Layer::ID const& layer) const
{
for (int i = mZoneBounds.left/32; i < mZoneBounds.left/32 + mZoneBounds.width/32; ++i)
{
for (int j = mZoneBounds.top/32; j < mZoneBounds.top/32 + mZoneBounds.height/32; ++j)
{
mZone[i][j].draw(window,layer);
}
}
}
mZone est un : std::vector<std::vector<Tile>>
Ensuite, vous pouvez le deviner, une Tile se dessine comme ça :
void Tile::draw(sf::RenderWindow& window, Layer::ID const& layer) const
{
if (layer < Layer::Count)
{
window.draw(mSprites[layer]); /// C'est ici que le debugger marque une erreur
}
}
Et au cas où, je vous montre ça :
namespace Layer
{
enum ID
{
Sol = 0,
Mid = 1,
Top = 2,
Count = 3,
};
}
Et quand je défini mSprites (dans Tile), c'est un std::array d'une taille de Layer::Count (3, une case / couche)
Quand je lance un coup de debugger, j'obtient :
#0 68ED3151 sf::RenderTarget::draw(this=0x28fba0, drawable=..., states=...) (D:\developpement\sfml\sfml\src\SFML\Graphics\RenderTarget.cpp:147)
#1 00403FB3 Tile::draw(this=0x0, window=..., layer=@0x28fa2c: Layer::Sol) (C:\ProjetsC++\src\Tile.cpp:21)
#2 00404DB3 Zone::draw(this=0x3ba00e8, window=..., layer=@0x28fa2c: Layer::Sol) (C:\ProjetsC++\src\Zone.cpp:54)
#3 00404589 World::draw(this=0x3b85550) (C:\ProjetsC++\src\World.cpp:17)
#4 00403D82 GameState::draw(this=0x3b85548) (C:\ProjetsC++\src\GameState.cpp:11)
#8 0040155A Application::Application(this=0x28fb78) (C:\ProjetsC++\src\Application.cpp:12)
#9 00401435 main() (C:\ProjetsC++\main.cpp:5)
Voilà, si le problème est connu ou que je suis tout simplement trop bête pour le voir... J'aimerais bien un petit coup de main
Edit: Bon j'ai essayé de trouver dans mon coin mais j'ai rien de bien...
Voilà ma nouvelle fonction pour Tile::draw :
void Tile::draw(sf::RenderWindow& window, Layer::ID const& layer) const
{
if (layer < Layer::Count)
{
std::cout << mSprites.at(0).getPosition().x << std::endl; // Nouvelle Ligne de l'erreur...
window.draw(mSprites.at(0));
}
}
Maintenant la ligne de l'erreur a changée... Et je n'ai aucune idée de pourquoi l'erreur pourrait venir de cette ligne...
Voilà la déclaration de mSprites : std::array<sf::Sprite, Layer::Count> mSprites;
Et voilà son initialisation :
// On crée les sprites en fonction des codes
for (unsigned int i = 0; i < Layer::Count; ++i)
{
mSprites[i].setTexture(mTexture);
mSprites[i].setPosition(pos);
mSprites[i].setTextureRect(sf::IntRect(posTexture.x,posTexture.y,32,32));
}