Project, Text wird nicht gezeichnet



  • Liebe Community, Ich bin bei C++ gerade an einem Größerne Project, bei dem ich uch die SFML und die GUI nutze. Hier mal ein kleiner Ausschnitt:

    #include "Options.hpp"
    #include "GUI\Button.hpp"
    #include "GUI\GUIObject.hpp"
    #include "GUI\Checkbox.hpp"
    
    Options::Options(sf::RenderWindow *rw,sf::Event *ev,GUIManager *gui)
    {
    	mMainStateWindow = rw;
    	mMainStateEvent = ev;
    	mStateGuiManager = gui;
    
    	//Text
    	OptionsText[0].setString("Options");
    	OptionsText[0].setCharacterSize(27);
    	OptionsText[0].setStyle(sf::Text::Bold | sf::Text::Underlined);
    	OptionsText[0].setPosition(400-OptionsText[0].getLocalBounds().width/2,50);
    
    	OptionsText[0].setString("Fullscreen");
    	OptionsText[0].setCharacterSize(27);
    	OptionsText[0].setStyle(sf::Text::Bold | sf::Text::Underlined);
    	OptionsText[0].setPosition(400-OptionsText[0].getLocalBounds().width/2,50);
    
    	OptionsText[0].setString("Sound");
    	OptionsText[0].setCharacterSize(27);
    	OptionsText[0].setStyle(sf::Text::Bold | sf::Text::Underlined);
    	OptionsText[0].setPosition(400-OptionsText[0].getLocalBounds().width/2,50);
    

    Nun sollten im Zeichenfenster doch die Begriffe Options, Sound und Fullscreen auftauchen, doch diese sieht man einfach nicht.



  • Rufst du denn irgendwo die draw-Methode des RenderWindow auf? Der Text malt sich nicht von selbst.



  • Ja mache ich, geht trotzdem nicht.

    void Options::Render()
    {
    	mMainStateWindow->draw(OptionsText[0]);
    	mMainStateWindow->draw(OptionsText[1]);
    	mMainStateWindow->draw(OptionsText[2]);
    }
    


  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • OptionsText[0]
    

    😉

    Edit: Und überprüfe ob die Positionen auch richtig berechnet werden.


  • Mod

    Singender Holzkübel schrieb:

    OptionsText[0]
    

    😉

    Edit: Und überprüfe ob die Positionen auch richtig berechnet werden.

    👍

    copy paste ist suboptimal

    const std::string Names[]={"Options","Fullscreen","Sound"}:
    const size_t MenueOffsetX=400;
    const size_t MenueOffsetY=50;
    const size_t CharSize=27;
    for(size_t a=0,S=sizeof(Names)/sizeof(Names[0]);a<S;a++)
    {
    	OptionsText[a].setString(Names);
    	OptionsText[a].setCharacterSize(CharSize);
    	OptionsText[a].setStyle(sf::Text::Bold | sf::Text::Underlined);
    	OptionsText[a].setPosition(MenueOffsetX-OptionsText[a].getLocalBounds().width/2,MenueOffsetY+a*CharSize);
    }
    


  • Mh, also ich habe einige kleine fehler gemacht von den Positionen undso, trotzdem lauf meinem Code sollte man zumindest einen der 3 Begriffe sehe, aber man sieht garkeinen.



  • Achja, ich habe auf einige Buttons programmiert, auf denen auch Text stehen sollte. Ich habe alles richtig gemacht, die buttons werden auch angezeigt und sie erfüllen auch ihren Zweck, aber Text steht keiner drauf...



  • Achja, ich habe auf einige Buttons programmiert, auf denen auch Text stehen sollte. Ich habe alles richtig gemacht, die buttons werden auch angezeigt und sie erfüllen auch ihren Zweck, aber Text steht keiner drauf...



  • MrBambi schrieb:

    Ich habe alles richtig gemacht, ..., aber ...

    *facepalm*

    Du benötigst erstmal die Einsicht dass du eben nicht alles richtig gemacht hast. Sonst ginge ja alles.

    Du hast allerdings natürlich einen Teil richtig (bzw. teilrichtig, hihi) gemacht. (Sonst ginge logischerweise gar nix.)

    ----
    And now to something etwas mehr hilfreich: setFont



  • Naja ich mache es nach einem Tutorial. Ich habe alles Mehrmals überprüft doch bei mir ist der code genauso wie in dem tutorial.



  • MrBambi schrieb:

    Naja ich mache es nach einem Tutorial. Ich habe alles Mehrmals überprüft doch bei mir ist der code genauso wie in dem tutorial.

    Na dann lade mal gen ganzen Menü-Code wo hoch (als Zip wäre praktisch), und verlinke das Tutorial.

    Irgendwo muss ja der Fehler sein.



  • Okey, folgendes Beispiel:

    void Options::HandleEvents()
    {
    	if(mStateGuiManager->GetGUIObject("Options/BackToMenu")->isClicked() == true)
    	{
    		SetNextState("State/Menu");
    	}
    }
    void Options::EnterState()
    {
    
    	Button *OptionsToMenuButton    = new Button("Options/BackToMenu",   sf::Vector2f(100,100),sf::Vector2f(1,1),"Texture/ExitButton.png","Exit");
    	OptionsToMenuButton->setPosition(sf::Vector2f(800/2-OptionsToMenuButton->getSprite().getTextureRect().width/2,400));
    	mStateGuiManager->RegisterGUIObject(OptionsToMenuButton);
    
    }
    void Options::LeaveState()
    {
    	mStateGuiManager->ClearGUIObjects();
    	SetNextState("");
    }
    

    Das hier sagt doch jetzt, das eseinen Button gibt, welcher einen zurück ins Menü bringt. Auserdem sollte Exit draufstehen, tut es aber nicht.

    Mal noch ein Beispiel:

    sf::Font font;
    font.loadFromFile("arial.ttf");
    
    sf::Text text("TTTTEEEEESSSSTTTT!!!!!!!!!", font);
    text.setCharacterSize(30);
    text.setStyle(sf::Text::Bold);
    text.setColor(sf::Color::White);
    mMainStateWindow->draw(text);
    

    Hier sollte ebenfalls ein Text stehen, welcher nicht angezeigt wird. Die Datei arial.ttf wurde aber gefunde und geladen, andernfalls würde es in der Konsole stehen.



  • Clearst du zufällig das Fenster, nachdem du den Text zeichnest?
    Wird die Font auch wirklich geladen? Überprüfe Rückgabewert von loadFromFile.
    Versuch es mal mit anderen Fonts.
    Setze die Textfarbe mal auf Rot.
    Wrappe den Text-Render-Code zwischen mMainStateWindow->pushGLStates(); und mMainStateWindow->popGLStates();



  • Naja ich mache es nach einem Tutorial. Ich habe alles Mehrmals überprüft doch bei mir ist der code genauso wie in dem tutorial.



  • MrBambi schrieb:

    Naja ich mache es nach einem Tutorial. Ich habe alles Mehrmals überprüft doch bei mir ist der code genauso wie in dem tutorial.

    Hast du das ausprobiert was ich gepostet habe?



  • 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


Log in to reply