2017-01-04 1 views
0

Der Code, den ich geschrieben habe, zeigt die sf :: Drawable Objekte nur für den obersten Status des Statusstacks an. Rendering funktioniert für alles, außer für den sf :: Text-Typ, der die Farbe des Textes nicht ändert, wenn button.getText(). SetFillColor (sf :: Color: Red) aufgerufen wird. Wenn ich jedoch eine Schaltfläche mit einem roten Text konstruiere, erhalte ich immer dann, wenn ich versuche, eine andere Farbe für diese Schaltfläche festzulegen, einen weißen Text, egal welche Farbe ich anfrage.SFML sf :: Text :: setFillColor ist kaputt oder mache ich etwas falsch?

Hier ist, wo ich die Farbe einer Schaltfläche ändern:

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

und das ist mein Spiel :: render() Methode:

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

Schließlich ist dies die Zeichenmethode des MainMenu Zustand:

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

'für jeden'? Ist das C++? – Unimportant

+0

ja, es ist eine C++ 11-Funktion (könnte falsch sein). – ijustpostedsomethingdumb

+1

Scheint eine MS-spezifische Sache zu sein, bevor die bereichsbasierte for-Schleife in C++ 11 eingeführt wurde: http://stackoverflow.com/questions/9182879/which-is-preferable-for-e-in-o-for-for-for -jeder. – Unimportant

Antwort

0

Es ist wahrscheinlich, weil Sie eine while-Schleife in der GameState_MainMenu :: handleRealTimeInput tha haben t das Programm wird stecken bleiben.

Sie können versuchen, Threads zu verwenden, obwohl dieser Weg ziemlich chaotisch werden könnte. Ich empfehle Ihnen, Ihren Code zu überarbeiten.

+0

Das Spiel bleibt nicht stecken, da es mir erlaubt Daten einzugeben, wie zum Beispiel Tastaturbewegungsdaten. – ijustpostedsomethingdumb

+0

@ijustpostedsomethingdumb gut, basierend auf Ihrem Code scheint es anders zu sein. Basierend auf dem, was ich sehe, trifft es die While-Schleife und stoppt dort. – Verideth

+0

@ijustpostedsomethingdumb Es gibt nicht genügend Informationen, um nach dem erneuten Lesen dieses Codes einen Vorschlag zu machen. – Verideth

0

Okay, also habe ich herausgefunden, dass dies etwas mit C++ für jeden Befehl zu tun hat. Sobald ich zum klassischen arrayähnlichen Traversal wechselte, begannen meine Tasten, die Farben zu wechseln. Ich sage nicht, das ist die Lösung, nur dass es für mich funktioniert hat. Wenn jemand das gleiche Problem hat, sollten Sie das überprüfen.

Verwandte Themen