2017-01-04 16 views
0

我寫的代碼僅顯示狀態堆棧頂部狀態的sf :: Drawable對象。除了sf :: Text類型之外,渲染對一切都很好,當調用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(); 
     } 
    } 
} 

,這是我的遊戲:: 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()); 
    } 
} 
+0

'for each'?這是C++嗎? – Unimportant

+0

是的,這是一個C++ 11功能(可能是錯誤的)。 – ijustpostedsomethingdumb

+1

似乎是基於循環範圍之前的C++ 11中引入的特定於MS的事情:http://stackoverflow.com/questions/9182879/which-is-preferable-for-each-in-or-for -每。 – Unimportant

回答

0

這可能是因爲你在GameState_MainMenu :: handleRealTimeInput tha中有一個while循環t該程序被卡住了。

你可以嘗試使用線程,儘管這樣會變得非常混亂。我建議修改你的代碼。

+0

遊戲不會卡住,因爲它允許我輸入數據,例如鍵盤移動數據。 – ijustpostedsomethingdumb

+0

@ijustpostedsomethingdumb很好,根據你的代碼,它似乎是不同的。根據我所看到的打開while循環然後停在那裏。 – Verideth

+0

@ijustpostedsomethingdumb重新讀取此代碼後沒有足夠的信息來提出建議。 – Verideth

0

好吧,所以我想出了這與每個指令的C++有關。只要我切換到經典的數組遍歷,我的按鈕開始改變顏色。我並不是說這是解決方案,只是它對我有用。如果任何人有同樣的問題,你可能想檢查一下。