SFML sf::Text::setFillColor 坏了,还是我做错了什么

SFML sf::Text::setFillColor is broken or am I doing something wrong?

本文关键字:错了 什么 sf Text setFillColor 坏了 SFML      更新时间:2023-10-16

我编写的代码仅显示状态堆栈顶部状态的sf::D rawable对象。渲染适用于所有内容,除了 sf::Text 类型,当调用 button.getText().setFillColor(sf::Color:Red) 时,它不会改变文本的颜色。但是,当我用红色文本构造一个按钮时,每当我尝试为该按钮设置另一种颜色时,无论我请求什么颜色,我都只会得到一个白色文本。

这是我更改按钮颜色的地方:

void GameState_MainMenu::handleRealTimeInput()
{
    for each (TextButton button in mButtons)
    {
        if (button.isSpriteClicked())
        {
            button.getText().setFillColor(sf::Color::Red);
            button.triggerAction();
            sf::Clock wait;
            sf::Time timer = sf::Time::Zero;
            timer = sf::seconds(0.15f);
            while (wait.getElapsedTime() < timer)
            {
            }
            wait.restart();
        }
    }
}

这是我的游戏::render() 方法:

void Game::render()
{
    GameState *currentState = getActiveState();
    if (currentState != nullptr)
    {
        mWindow.clear();
        currentState->draw();
    }
    mWindow.display();
}

最后,这是 MainMenu 状态的绘制方法:

void GameState_MainMenu::draw()
{
    game->mWindow.draw(game->mBackground);
    game->mWindow.draw(mSelector.mSprite);
    for each (TextButton button in mButtons)
    {
        game->mWindow.draw(button.getText());
    }
}

可能是因为你在 GameState_MainMenu:handleRealTimeInput 中有一个 while 循环,程序卡住了。

您可以尝试使用线程,尽管这种方式可能会变得非常混乱。我建议修改你的代码。

好的,所以我发现这与每条指令的 c++ 有关。一旦我切换到经典的类似数组的遍历,我的按钮就开始改变颜色。我并不是说这是解决方案,只是它对我有用。如果有人有同样的问题,您可能需要检查一下。