1
Graphique / Re : Re : Problème de positionnement avec sf::VertexArray
« le: Avril 24, 2013, 12:01:43 pm »CiterHum... C'est à dire ?Non, tu gardes exactement la même définition avec les mêmes lignes, mais au lieu de les regrouper 1 par 1 tu les mets toutes dans le même vertex array et tu les dessines d'un coup. C'est un peu ça le but du vertex array à la base
Un vertexArray avec plein de Vectex à chaque intersection ?
Je trouvais plus économique de tracer des droites (2*43*2 points) plutôt que de spécifier toutes les intersections (43^2 points)
Ahhh, oki, je comprend mieux.
En effet, ça marche très bien
void MapView::draw(sf::RenderTarget& target, sf::RenderStates states) const {
for(auto tileIt = this->mapLvl0.begin(); tileIt != this->mapLvl0.end(); ++tileIt) {
target.draw(**tileIt, states);
}
for(auto tileIt = this->mapLvl1.begin(); tileIt != this->mapLvl1.end(); ++tileIt) {
target.draw(**tileIt, states);
}
sf::VertexArray vArray(sf::Lines, (target.getSize().x / 16 + 1)*4);
for(unsigned int i = 0; i <= target.getSize().x / 16; i++) {
vArray[2*i].position = sf::Vector2f(i*16+0.5f,0);
vArray[2*i+1].position = sf::Vector2f(i*16+0.5f,target.getSize().y);
vArray[2*i].color = sf::Color::White;
vArray[2*i+1].color = sf::Color::White;
//Debug::info << NEW_ENTRY << 2*i << ":" << 2*i+1 << std::endl;
}
unsigned int offset = 2 * (target.getSize().x / 16 + 1);
for(unsigned int i = 0; i <= target.getSize().y / 16; i++) {
vArray[offset+2*i].position = sf::Vector2f(0,i*16+0.5f);
vArray[offset+2*i+1].position = sf::Vector2f(target.getSize().x,i*16+0.5f);
vArray[offset+2*i].color = sf::Color::White;
vArray[offset+2*i+1].color = sf::Color::White;
//Debug::info << NEW_ENTRY << offset+2*i << ":" << offset+2*i+1 << std::endl;
}
target.draw(vArray, states);
}
for(auto tileIt = this->mapLvl0.begin(); tileIt != this->mapLvl0.end(); ++tileIt) {
target.draw(**tileIt, states);
}
for(auto tileIt = this->mapLvl1.begin(); tileIt != this->mapLvl1.end(); ++tileIt) {
target.draw(**tileIt, states);
}
sf::VertexArray vArray(sf::Lines, (target.getSize().x / 16 + 1)*4);
for(unsigned int i = 0; i <= target.getSize().x / 16; i++) {
vArray[2*i].position = sf::Vector2f(i*16+0.5f,0);
vArray[2*i+1].position = sf::Vector2f(i*16+0.5f,target.getSize().y);
vArray[2*i].color = sf::Color::White;
vArray[2*i+1].color = sf::Color::White;
//Debug::info << NEW_ENTRY << 2*i << ":" << 2*i+1 << std::endl;
}
unsigned int offset = 2 * (target.getSize().x / 16 + 1);
for(unsigned int i = 0; i <= target.getSize().y / 16; i++) {
vArray[offset+2*i].position = sf::Vector2f(0,i*16+0.5f);
vArray[offset+2*i+1].position = sf::Vector2f(target.getSize().x,i*16+0.5f);
vArray[offset+2*i].color = sf::Color::White;
vArray[offset+2*i+1].color = sf::Color::White;
//Debug::info << NEW_ENTRY << offset+2*i << ":" << offset+2*i+1 << std::endl;
}
target.draw(vArray, states);
}
Merci Laurent !
Tout marche nickel