Project, Text wird nicht gezeichnet



  • Oh tut mir Leid das ich dieselbe Nachricht nochmal geschrieben habe. Wollt ich nicht. Also:Textfarbe ändern hatnicht geholfen. Die Fonts können auch geladen werden. Alles überprüft. Aber ich weis leider nicht was genau du mit
    "Wrappe den Text-Render-Code zwischen mMainStateWindow->pushGLStates(); und mMainStateWindow->popGLStates();" meinst.



  • MrBambi schrieb:

    Aber ich weis leider nicht was genau du mit
    "Wrappe den Text-Render-Code zwischen mMainStateWindow->pushGLStates(); und mMainStateWindow->popGLStates();" meinst.

    Ok, "wrappe" war nicht das beste Wort:

    mMainStateWindow->pushGLStates();
    mMainStateWindow->draw(text);
    mMainStateWindow->popGLStates();
    


  • Naja jetzt siehts so aus:

    sf::Text text("TTTTEEEEESSSSTTTT!!!!!!!!!", font);
    text.setCharacterSize(30);
    text.setStyle(sf::Text::Bold);
    text.setColor(sf::Color::Red);
    mMainStateWindow->pushGLStates();
    mMainStateWindow->draw(text);
    mMainStateWindow->popGLStates();
    

    Nur jetzt ist das Fenster komplett leer.



  • Naja es ist wohl das Beste wenn ihr euch das ganze Projekt mal selbst anschaut.
    https://www.dropbox.com/s/buwm2l8xyfmjg9w/Projekt1.rar
    Ich bin mir jetzt nicht sicher, aber da man beim einbinden der SFML ja die ganzen Verzeichnisse auswählen muss, welche bei euch ja anders sind, kanns sein das man diese neu einbinden muss. Genau weis ich das aber nicht habs noch nie ausprobiert, erscheint mir aber Logisch. Mal zum Projekt: da ich am Schluss noch etwas experimentier habe, kanns sein das einige Sachen kommentiert sind, also nicht wundern. Auserdem, am Anfang wenn man das Projekt Releast, kommt man ins Menü. Drückt man auf den Button Options (Bei mir werden ja die Texte der Buttons nicht angezeigt, aber es ist der 2. von oben) kommt man in den State Options. Da hätte ich ganz oben mittig auch gerne den Text "Options". Hoofentlich kann mir nun jemand helfen.

    EDIT: Sorry das war das falsche Projekt. Man bin ich verplant 😃 Hier das richtige:
    https://www.dropbox.com/s/1cqqzp4czgwkegp/Chicken%20Attack.rar



  • MrBambi schrieb:

    EDIT: Sorry das war das falsche Projekt. Man bin ich verplant 😃 Hier das richtige:
    https://www.dropbox.com/s/1cqqzp4czgwkegp/Chicken%20Attack.rar

    Und jetzt erst habe ich es geschafft, das falsche Projekt zum kompilieren zu bringen. 👍
    Gab es irgendwelch Änderungen von Bedeutung? Habe jetzt ehrlich gesagt keine Lust, das ganze erneut von vorne zu machen.

    Und ja, Text sehe ich auch keinen. Mal schaun.



  • Naja beim ersten hab ich i.was gemacht dann konnte bei mir die projektmappe nimmer geöffnet werden. Das 2. war ne kopie wos noch ging. Aber ansonsten is es dasselbe.



  • Naja beim ersten hab ich i.was gemacht dann konnte bei mir die projektmappe nimmer geöffnet werden. Das 2. war ne kopie wos noch ging. Aber ansonsten is es dasselbe.



  • Ich hab nochmal was nachgeschaut. Es werden nichtmal die Text in einer Textbox angezeigt.



  • Fehler gefunden.

    Die ganzen GUI-Objekte (z.B. Button.cpp) haben zwar einen Text (mText), aber keine Font angegeben.

    Im Endeffekt fehlt in Button.cpp im Konstruktor ein mText.setFont(...); Aufruf.

    So sieht es bei mir aus.



  • DANKE! 😃
    Wie genau muss ich die Font jetzt laden?
    Ich hätte es so gemacht, einfach im Konstruktor

    sf::Font font;
    font.loadFromFile("arial.ttf");
    mText  .setFont(font);
    

    uu schreiben, aber da gibt es dann eine Zugriffsverletzung. Also wie hast du das gemacht? 🙂



  • MrBambi schrieb:

    DANKE! 😃
    Wie genau muss ich die Font jetzt laden?
    Ich hätte es so gemacht, einfach im Konstruktor

    sf::Font font;
    font.loadFromFile("arial.ttf");
    mText  .setFont(font);
    

    uu schreiben, aber da gibt es dann eine Zugriffsverletzung. Also wie hast du das gemacht? 🙂

    Die SFML Dokumentation sagt folgendes:

    It is important to note that the sf::Text instance doesn't copy the font that it uses, it only keeps a reference to it. Thus, a sf::Font must not be destructed while it is used by a sf::Text

    Heißt: Ein sf::Text Objekt kopiert die Font nicht, sondern speichert nur eine Referenz auf das Font Objekt. Daher wird wohl die Zugriffsverletzung kommen.
    Die Font muss also zur kompletten Lebenszeit von mText erhalten sein.

    Eine Lösung könnte so aussehen:

    /// GUIObject.hpp, ca. Zeile 44:
    // ...
    sf::Texture mTexture;
    sf::Sprite  mSprite;
    sf::Text    mText;
    bool        mActive;
    sf::Font    mFont;   // Neu!
    // ...
    
    /// GUIObject.cpp, ca. Zeile 12 (im Konstruktor):
    // ...
    {
        mFont.loadFromFile("arial.ttf");
        mText.setFont(mFont);
    }
    

    Das ist zwar nicht die Speicher-Effizienteste Art, da jedes GUIObject eine eigene Kopie der Font hat, aber das könnte man auch einfach lösen (Stichwort static).



  • Vielen Dank! Endlich funktioniert es 😃



  • Wow, ihr habt den Fehler gefunden.
    Aber Moment...

    hustbaer schrieb:

    And now to something etwas mehr hilfreich: setFont


Anmelden zum Antworten