2017-01-04 1 views
0

Код, который я написал, отображает объекты sf :: Drawable только для верхнего состояния стека состояний. Рендеринг работает отлично для всего, кроме sf :: Text type, который не меняет цвет текста, когда button.getText() вызывается setFillColor (sf :: Color: Red). Однако, когда я создаю кнопку с красным текстом, всякий раз, когда я пытаюсь установить другой цвет этой кнопки, я получаю только белый текст, независимо от того, какой цвет я запрашиваю.SFML sf :: Text :: setFillColor нарушен, или я делаю что-то неправильно?

Вот где я изменить цвет кнопки:

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(); 
     } 
    } 
} 

и это моя игра :: визуализации() метод:

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()); 
    } 
} 
+0

'для каждого'? Это C++? – Unimportant

+0

Да, это функция C++ 11 (может быть, и не так). – ijustpostedsomethingdumb

+1

Кажется, что это специфичная для MS вещь, прежде чем диапазон, основанный на цикле, был введен в C++ 11: http://stackoverflow.com/questions/9182879/which-is-preferable-for-each-in-or-for -Каждый. – Unimportant

ответ

0

Это, вероятно, потому, что у вас есть цикл, а в GameState_MainMenu :: handleRealTimeInput тх t программа застревает.

Вы можете попробовать использовать темы, но этот способ может стать довольно грязным. Предлагаю пересмотреть код.

+0

игра не застревает, поскольку она позволяет мне вводить данные, такие как данные перемещения клавиатуры. – ijustpostedsomethingdumb

+0

@ijustpostedsomethingdumb well, основанный на вашем коде, кажется, что он отличается. Основываясь на том, что я вижу, он нажимает на цикл while, а затем останавливается там. – Verideth

+0

@ijustpostedsomethingdumb не хватает информации, чтобы сделать предложение после перечитывания этого кода. – Verideth

0

Хорошо, поэтому я понял, что это связано с C++ для каждой инструкции. Как только я переключился на классический обход массива, мои кнопки начали менять цвета. Я не говорю, что это решение, просто для меня это работало. Если у кого-то такая же проблема, вы можете проверить это.

Смежные вопросы