SFML 2.3 Objekte werde nicht gezeichnet.



  • Guten Abend,

    Ich bekomme die Objekte einfach nicht auf den Bildschirm.
    Es wird kein Fehler angezeigt und Programm funktioniert auch.
    Dauraus folgere ich einen Logikfehler meinerseits oder ich
    verstehe da was von SFML nicht...
    Langsam verzweifel ich... 😞

    Das Programm ist in der Struktur aufgebaut:
    programm Klasse (besitzt das Fenster)

    programmstatus
    -menü
    -simulation

    Das menü einfach vergessen es ist so gemacht das es erstmal nur die Simulation macht. Ein unique ptr weist immer auf die Klasse welche laufen soll.

    Auf jeden fall läuft es immer schön seine Rutine durch und aktualisiert immer das Fenster aber kein Objekt erscheint.

    bool programm::run()
    {
    
    	upPSZZ->verstehen(*this);
    	Fenster.clear(sf::Color(0, 0, 000, 255));
    
    	upPSZZ->rechnen(*this);
    	upPSZZ->antworten(*this);
    
    	Fenster.display();
    	return Fenster.isOpen();
    };
    
    simulation::simulation()
    {
    	cout << "hier ist die simulation" << endl;
    
    	sf::CircleShape test;
    
    	test.setRadius(50);
    	test.setFillColor(sf::Color(100, 100, 100, 255));
    	test.setPosition(450, 450);
    
    };
    
    void simulation::antworten(programm& pprogramm)
    {
    
    	pprogramm.Fenster.draw(test);
    
    };
    

    bool programm::run()
    wird immer durchlaufen und damit auch das Zeichnen von dem Objekt
    "test" aber es ist nicht zu sehen 😡

    Danke schon mal im Vorraus!
    MfG, Rarebit;



  • Mir ist noch aufgefallen nach rumexperimentiern,
    das wenn man in der Schleife die die Gamestates beinhält direkt ein Kreis
    erstellt dieser auch gezeichnet wird. Vielleicht ist dies hilfreich.

    bool programm::run()
    {
    
    	upPSZZ->verstehen(*this);
    	Fenster.clear(sf::Color(0, 0, 0, 255));
    	upPSZZ->rechnen(*this);
    
    	upPSZZ->antworten(*this);
    
    	sf::CircleShape kreis;
    	kreis.setRadius(50);
    	kreis.setFillColor(sf::Color(100, 100, 100, 255));
    	kreis.setPosition(450, 450);
    	Fenster.draw(kreis);
    
    	Fenster.display();
    	return Fenster.isOpen();
    };
    


  • Stichwort: lokale Variable!!!

    Du definierst so eine in der Funktion simulation(), d.h. diese entspricht nicht der (wohl gleichnamigen) Membervariablen in deiner Klasse programm.

    Als Hinweis ("Guter Rat" ;-): GUI <-> Model <-> Simulation



  • Th69 schrieb:

    Stichwort: lokale Variable!!!

    Du definierst so eine in der Funktion simulation(), d.h. diese entspricht nicht der (wohl gleichnamigen) Membervariablen in deiner Klasse programm.

    Als Hinweis ("Guter Rat" ;-): GUI <-> Model <-> Simulation

    Danke erstmal, so etwas habe ich mir auch gedacht, daher habe ich es mit einem
    unique_ptr gemacht und es ging.

    Trotzdem würde es mich freuen wenn du mir deinen Kommentar noch etwas ausführlicher
    erläutern könntest, damit ich es ganz genau verstehe.
    Danke schon mal im voraus.



  • Verstanden [Closed]


Anmelden zum Antworten