如何设置sf :: Text的可见区域

时间:2015-08-17 21:07:42

标签: sfml

我正在制作一些类来帮助使用 SFML 创建GUI。我希望能够只显示sf::Text的一部分。类似setTextureRect类中的sf::Sprite

我找到的唯一解决方案是将文本绘制到sf::RenderTexture,然后将其纹理指定给精灵。然后我可以在窗口上绘制这个精灵。

//The class contains :
sf::RenderTexture buffer;

//When the class is created :
buffer.create(window.getSize().x,window.getSize().y);

//To draw on the screen :
window.clear();
buffer.clear();

buffer.draw(text);
buffer.display();

sprite.setTexture(buffer.getTexture());

window.draw(sprite);
window.display();

这允许我使用sf::Sprite::setTextureRect,但速度非常慢。我测得它比直接抽奖慢大约100倍。我尝试将缓冲区创建为文本大小,但它对性能几乎没有影响。

所以我的问题是,有没有办法只显示更高效的sf :: Text(或sf :: Shape)的一部分?

2 个答案:

答案 0 :(得分:4)

您可以使用sf :: View来确定绘制的内容和不绘制的内容。 请记住,相对于窗口绘制的矩形使用范围0.f - 1.f。

tutorials可以提供帮助。

答案 1 :(得分:1)

如您所见,在sf :: Text中没有方法可以做到这一点。 http://www.sfml-dev.org/documentation/2.3.1-fr/classsf_1_1Text.php

但是,如果你说的话,你想这样做:http://i.imgur.com/FsvnP.png

您可以计算sf :: Text的大小,并在超过帧大小之前剪切它(并最终替换最后的字符)。 例如,"人物2554548747848874874"将是"人25545 .."。 它很顺利,很多列表都是这样做的。 (您有Windows任务资源管理器的示例)

正如DarkPhantom所说,还有sf :: View,但是你必须尝试去做很多setView()是否可靠。