Obwohl es (noch) nicht direkt implementiert ist, können Sie dies - wie von Bartek erwähnt - dafür verwenden , aber ich würde eine sf::VertexArray
empfehlen.
Zuerst benötigen Sie eine Funktion, um ein beliebiges Zeichen in Koordinaten in Ihrem Sprite Sheet zu übersetzen. Es gibt mehrere Möglichkeiten, dies zu tun. Aber jetzt würde ich besiedeln nur eine einfache Zuordnung zu tun:
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
Bitte beachte, dass ich nicht messen habe Ihr Charakter Blatt oben. Ich habe gerade 24 Pixel für die Demonstration verwendet. Natürlich könnten Sie ein solches Mapping dynamisch erstellen, wenn Sie die "Schriftart" laden.
Beim Zeichnen eines sf :: Sprite verwendet, könnte man dann einfach so etwas tun:
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;
}
Der Ansatz für eine sf :: VertexArray ist ähnlich, aber Sie würden es nur eher von Glyphen Glyphe konstruieren als sie alle wieder und wieder zu zeichnen.
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);
Beachten Sie, dass diese alle Code nicht getestet und aus dem Speicher ist, so erwarten Bugs hier oder dort, aber es sollte Ihnen einen Überblick geben, wie Sie es tun könnte.
Wie würde ich das dann machen? – Lucky38i
@ Lucky38i: Sie implementieren es selbst oder verwenden Sie eine vorhandene Bibliothek. Hier ist meine Implementierung: https://github.com/SuperV1234/SSVStart/tree/master/include/SSVStart/BitmapText –