Bien qu'il ne soit pas encore implémenté (pour l'instant), vous pouvez le faire - comme mentionné par Bartek - utilisez sf::Sprite
pour cela, mais je recommanderais un sf::VertexArray
.
D'abord, vous aurez besoin d'une fonction pour traduire n'importe quel caractère en coordonnées à l'intérieur de votre feuille de sprite. Il y a plusieurs moyens de le faire. Mais pour l'instant je vous contentez de faire une cartographie simple:
std::map<wchar_t, sf::IntRect> glyphs;
glyphs[L' '] = sf::IntRect(0, 0, 24, 24);
glyphs[L'!'] = sf::IntRect(24, 0, 24, 24);
// etc. define everything in your font
Notez que je n'ai pas mesuré votre feuille de personnage ci-dessus. Je viens d'utiliser 24 pixels pour la démonstration. Bien sûr, vous pouvez créer un mapping dynamique de cette manière lorsque vous chargez la "police".
Lorsque dessin à l'aide que vous pourriez alors d'un sf Sprite juste faire quelque chose comme ceci:
sf::Sprite character(myFontTexture);
int x = 0;
for(auto &c : text) {
auto &glyph = glyphs.find(c);
// Unknown character not in our mapping?
if(glyph == glyps.end())
continue; // skip it!
// Update the sprite
character.setTextureRect(glyph);
character.setPosition(x, 0);
// Draw it
window.draw(character);
// Update the position for the next glyph
x += glyph.width;
}
L'approche d'une sf :: VertexArray est similaire, mais vous venait de le construire glyphe par glyphe plutôt que de les redessiner encore et encore.
int x = 0;
for(auto &c : text) {
auto &glyph = glyphs.find(c);
// Unknown character not in our mapping?
if(glyph == glyps.end())
continue; // skip it!
// Specific vertex layout etc. depends on the actual sf::VertexArray
myVertexArray.append(sf::Vertex2f(sf::Vector2f(x, 0), sf::Vertex2f(glyph.left, glyph.top));
myVertexArray.append(sf::Vertex2f(sf::Vector2f(x + glyph.width, 0), sf::Vertex2f(glyph.left + glyph.width, glyph.top));
myVertexArray.append(sf::Vertex2f(sf::Vector2f(x + glyph.width, glyph.height), sf::Vertex2f(glyph.left + glyph.width, glyph.top + glyph.height));
myVertexArray.append(sf::Vertex2f(sf::Vector2f(x, glyph.height), sf::Vertex2f(glyph.left, glyph.top + glyph.height));
}
// Draw the text
window.draw(myVertexArray);
Notez que tout ce code est non testé et de la mémoire, alors attendez-vous des bugs ici ou là, mais il devrait vous donner une idée générale sur la façon dont vous pourriez le faire.
Comment ferais-je cela alors? – Lucky38i
@ Lucky38i: vous l'implémentez vous-même ou utilisez une bibliothèque existante. Voici ma mise en œuvre: https://github.com/SuperV1234/SSVStart/tree/master/include/SSVStart/BitmapText –