【问题标题】:Centering text on top of buttons in SFML在 SFML 中的按钮顶部居中文本
【发布时间】:2021-08-03 23:14:23
【问题描述】:

我一直在尝试找到一个使文本居中的公式,但我无法让它适用于所有长度的文本,所以我有点卡住了,无法找到正确居中所有内容的方法。到目前为止,这是我所拥有的:

void Button::set_pos(sf::Vector2f pos) {
    button.setPosition(pos);

    float pos_x = (pos.x + button.getLocalBounds().width/3.0f) -
                  (text.getGlobalBounds().width/2);
    float pos_y = (pos.y + button.getLocalBounds().height/3.0f) -
                  (text.getGlobalBounds().height/2);
    text.setPosition(pos_x, pos_y);
}

但是,正如您所见,这不适用于所有长度的文本

我怎样才能让它正确居中

【问题讨论】:

  • 这能回答你的问题吗? SFML Drawing centered text
  • 很遗憾没有,我之前试过了,还是没有解决。
  • 那我有一个问题:在调用set_pos之前,是否设置了文本的字符串(sf::Text::setString)?因为如果是这样,那就是你的问题。当字符串已经设置时,您必须调用set_pos。否则,这没有意义,您要么跳过重要信息,要么没有正确尝试我之前评论中链接的解决方案。

标签: c++ windows sfml clion


【解决方案1】:

.getGlobalBounds() 与按钮一起使用,而不是.getLocalBounds()。应该可以的。

void Button::set_pos(sf::Vector2f pos) {
    button.setPosition(pos);

    float pos_x = (pos.x + button.getGlobalBounds().width/3.0f) -
                  (text.getGlobalBounds().width/2);
    float pos_y = (pos.y + button.getGlobalBounds().height/3.0f) -
                  (text.getGlobalBounds().height/2);
    text.setPosition(pos_x, pos_y);
}

【讨论】:

    【解决方案2】:

    sfml 中的文本从左下角而不是左上角开始。我使用text.getLocalBounds() 而不是text.getGlobalBounds()。为我工作。有同样的问题。

    另外确保文本不为空。即在任何转换之前使用text.setString()

    https://en.sfml-dev.org/forums/index.php?topic=9834.0

    【讨论】:

      猜你喜欢
      • 2017-12-12
      • 2012-07-28
      • 2020-10-20
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多