我正在制作一些类来帮助使用 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)的一部分?
答案 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()是否可靠。