Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

1

22.06.2015, 17:50

[C++ | SFML] Variable als Text darstellen funktioniert nicht

Hallo Leute,
leider hört ihr schon wieder von mir. Ich habe folgendes Problem: Nachdem ich mein erstes Spiel in der SFML fertig gestellt habe, möchte ich ein neues Spiel anfangen, welches etwas besser werden soll. Natürlich möchte ich auch, dass Text auf dem Bildschrim ausgegeben wird, z.B. die aktuellen Punkte. Wie man Text darstellt, weiß ich schon. Aber jetzt möchte ich eine Variable als Text darstellen. Dazu habe ich mir das Video angeschaut:
https://www.youtube.com/watch?v=HgmA1bBMeqM, habe alles mitgeschrieben, aber er zeigt die Variable nicht an ?(. Der Kompiler meldet auch keinen Fehler... Hier der Codeausschnitt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    int iPoints = 0;
    stringstream sPoints;

    // Punkte als Zahl
    Text PointsNumberText;

    // Punkte als Text
    Font PointsFont;
    PointsFont.loadFromFile ("Data/arial.ttf");
    Text PointsText ("Punkte:", PointsFont, 20);
    PointsText.setPosition (75.5f, 5.f);

    // Fenster erzeugen 
    RenderWindow window (VideoMode(1024, 768), "Ping-Pong");

    // Solange das Fenster offen ist, soll alles geamchte werden, 
    // was in der Schleife ist
    while(window.isOpen())
    {
        // Punkte (als Zahl) als String setzten
        PointsNumberText.setString(sPoints.str());
        sPoints << iPoints;

        // Ein Event
        Event event;
        while(window.pollEvent(event))
        {
            // Wurde auf "X" / Alt-F4 gedrückt?
            if(event.type == Event::Closed)
            {
                window.close(); // Fenster schließen
                system ("cls"); // Konsole "säubern"
            }
        }

        // Tastenabfrage
        CheckKeyboard (window);

        window.clear ();                // Fenster "säubern"
        window.draw (PointsText);       // Punkte als Zext darstellen
        window.draw (PointsNumberText); // Punkte als Zahl darstellen
        window.display ();              // Fenster (mit Zeichnungen) anzeigen
    }


Welchen Fehler habe ich gemacht? (Ich habe auch den sstream includiert)

Vielen Dank im Voraus!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

22.06.2015, 18:05

Hast Du den Rückgabewert von "PointsFont.loadFromFile()" geprüft? Ich wette, dass das dieser "false" ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

3

22.06.2015, 18:08

Ja, habe ich gemacht. Diesen Text läd er (also "Punkte:"). Aber das Problem ist, dass er den "PointsNumberText" nicht anzeigt. Ich habe mir das Video nochmal angeschaut und ich galube, dass ich nichts vergessen habe...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

22.06.2015, 18:10

Du sollst nicht schauen, ob er bis Zeile 10 kommt, sondern ob der Rückgabewert aus Zeile 9 "true" ist. Das macht Dein Code da oben nicht. Kommt da "false" zurück, wird das mit dem Label nicht gehen, weil die Pfad-Angabe zum Font falsch ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

22.06.2015, 18:12

sieht so aus als ob du, wie in zeile 10 die textgröße und schriftart für PointsNumberText nicht setzt.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

6

22.06.2015, 18:12

Achso ok. Ich habe eine Prüfung eingebaut:

C-/C++-Quelltext

1
2
if (!PointsFont.loadFromFile ("Data/arial.ttf"))
        cout << "Schrifart konnte nicht geladen werden" << endl;


Der Text wird nicht ausgegeben.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

22.06.2015, 18:15

sieht so aus als ob du, wie in zeile 10 die textgröße und schriftart für PointsNumberText nicht setzt.
Was sind dann Parameter 2 und 3? Allerdings dürfte Deine Aussage ziemlich gut auf Zeile 5 zutreffen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

22.06.2015, 18:16

ich meinte er hat es zwar in zeile 10 gemacht, aber eben nicht in zeile 5.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

9

22.06.2015, 18:21

Mh... Ich habe den Code nochmal überarbeitet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    int iPoints = 0;
    stringstream sPoints;

    // Punkte als Zahl
    Font PointsNumberFont;
    if (!PointsNumberFont.loadFromFile("Data/arial.ttf"))
        cout << "Schriftart konnte nicht geladen werden" << endl;
    Text PointsNumberText;

    // Punkte als Text
    Font PointsFont;
    if (!PointsFont.loadFromFile ("Data/arial.ttf"))
        cout << "Schrifart konnte nicht geladen werden" << endl;
    Text PointsText ("Punkte:", PointsFont, 20);
    PointsText.setPosition (75.5f, 5.f);

    // Fenster erzeugen 
    RenderWindow window (VideoMode(1024, 768), "Ping-Pong");

    // Solange das Fenster offen ist, soll alles geamchte werden, 
    // was in der Schleife ist
    while(window.isOpen())
    {
        // Punkte (als Zahl) als String setzten
        PointsNumberText.setString(sPoints.str());
        sPoints << iPoints;
        
        // Ein Event
        Event event;
        while(window.pollEvent(event))
        {
            // Wurde auf "X" / Alt-F4 gedrückt?
            if(event.type == Event::Closed)
            {
                window.close(); // Fenster schließen
                system ("cls"); // Konsole "säubern"
            }
        }

        // Tastenabfrage
        CheckKeyboard (window);

        window.clear ();                // Fenster "säubern"
        window.draw (PointsText);       // Punkte als Text darstellen
        window.draw (PointsNumberText); // Punkte als Zahl darstellen
        window.display ();              // Fenster (mit Zeichnungen) anzeigen
    }

10

22.06.2015, 18:24

PointsNumberText hat immer noch keine font und größe zugewiesen bekommen ;)
Übrigens, warum lädst du die gleiche font zweimal?

Werbeanzeige