【问题标题】:SFML 2.1 set all textSFML 2.1 设置所有文本
【发布时间】:2014-09-18 04:04:49
【问题描述】:

有什么方法可以将我拥有的所有文本或某些指定文本全部设置为相同的字体、颜色等?
这样做会更快更容易,而不是这样做:

text1.setColor(sf::Color::Black);
text2.setColor(sf::Color::Black);
text3.setColor(sf::Color::Black);
...

我在 C++98 中使用 SFML 2.1。

【问题讨论】:

  • 如果你启用了 C++11,你可以使用可变参数模板来实现你想要的。
  • 强烈建议您升级到 C++11 - 它有一些非常好的特性!
  • 您使用的是什么 IDE/编译器?它可能就像给你的编译器发送一个标志来告诉它你想使用 C++11 一样简单。
  • 您是否也在使用 GCC 作为您的编译器?
  • 那么设置和我一样。 gcc.gnu.org/projects/cxx0x.html 显示了每个 GCC 版本支持的 C++11 特性。要在使用 GCC 时在 Code::Blocks 中启用 C++11 支持,您必须启用 C++11 编译器标志。右键单击您的项目并选择“构建选项”,然后选择带有“-std=c++11”标志的选项(您可能希望为项目、调试和发布执行此操作)。完成后,您应该可以访问 GCC 版本授予的所有 C++11 功能。简单!

标签: c++ text sfml


【解决方案1】:

如果Text 实例与此相似,将它们保存在std::vector 或其他容器类中可能是有意义的。如果可以将它们合理地放置在这样的容器中,您可以简单地循环它们并更改您希望的任何属性:

for (std::vector<sf::Text>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
{
    it->setColor(sf::Color::Black);
    it->setFont(myfont);
}

鉴于对 cme​​ts 中 C++11 的兴趣,请编辑:

在 C++11 中,由于 automatic type deductionrange-based for loops,这变得更加简单。上面的语法简化为:

for (auto& text : myvector)            //don't miss the & or 'text' will be read-only!
{
    text.setColor(sf::Color::Black);
    text.setFont(myfont);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多