2017-04-19 2 views

Antwort

1

No.

SFML Schrift Handhabung ist nur mit normalen Font-Dateien. Sprite Sheet Fonts konnten problemlos mit implementiert werden.

+0

Wie würde ich das dann machen? – Lucky38i

+0

@ 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 –

1

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.

Verwandte Themen