答案 0 :(得分:1)
SFML字体处理仅涉及普通字体文件。不过,可以使用sf::Sprite
轻松实现精灵表字体。
答案 1 :(得分:1)
虽然它没有直接实现(但是),你可以这样做 - 正如Bartek所提到的 - 使用sf::Sprite
来做这件事,但我建议sf::VertexArray
。< / p>
首先,您需要一些功能将任何角色转换为精灵表内的坐标。有几种方法可以做到这一点。但是现在我只想做一个简单的映射:
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
请注意,我没有测量上面的字符表。我刚用24像素进行演示。当然,当你加载&#34; font&#34;。
时,你可以动态地构建这样的映射使用sf :: Sprite绘图时,您可以执行以下操作:
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;
}
sf :: VertexArray的方法类似,但你只是按字形构造字形,而不是一遍又一遍地重绘它们。
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);
请注意,所有这些代码都是未经测试的,并且来自内存,因此请注意此处或那里的错误,但它应该让您大致了解如何执行此操作。