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

1

30.05.2011, 14:19

Zahlen in String einfügen(SFML)

Hallo

Ich versuche gerade eine Zahl in einen Sfml sf::String einzufügen da ich aber nicht weiss wie das gehen soll und ich auch kein tutorial auf der offiziellen Seite gefunden habe frage ich einfach hier nach.

So habe ich mir das ungefähr vorgestellt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
    sf::Font FontScore;
    sf::String StringScore;

    FontScore.LoadFromFile("arial.ttf", 50);

    int Score = 100;

    StringScore.SetText("Score: (Hier soll die variable Score eingefügt werden)");
    StringScore.SetFont(FontScore);
    StringScore.SetColor(sf::Color(0, 128, 128));
    StringScore.SetPosition(300.f, 334.f);
    StringScore.SetRotation(0.f);
    StringScore.SetSize(20.f);

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

30.05.2011, 14:23

Bin mir nicht sicher, da ich nie wirklich mit SFML gearbeitet hab, aber ich vermute mit

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
sf::Font FontScore;    sf::String StringScore;

    FontScore.LoadFromFile("arial.ttf", 50);

    int Score = 100;

    StringScore.SetText("Score: "+Score);
    StringScore.SetFont(FontScore);
    StringScore.SetColor(sf::Color(0, 128, 128));
    StringScore.SetPosition(300.f, 334.f);
    StringScore.SetRotation(0.f);     StringScore.SetSize(20.f);

kommst du zum Ziel.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

30.05.2011, 14:30

Komisch wenn ich +Score eingebe kommt so ein komischer Pfad der in meinem Ordner auch existiert ungefähr so

Texture/LinkeEcke.png

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

30.05.2011, 14:55

mach doch folgendes:

Quellcode

1
2
3
4
//ganz oben brauchst du noch einen include - falls du ihn noch nicht hast:
#include 
int Score = 100;std::stringstream ss; ss << "Score: " << Score;
StringScore.SetText(ss.str());


EDIT: warum ist eigl der edit für c++ so buggy?!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

30.05.2011, 15:25

@Schorch: Du hast dort dem Zeiger 100 hinzuaddiert = undefiniertes Verhalten, bei einem so kurzen String. In diesem Fall zufällig die Addresse des Pfads raus xD

Am einfachsten ists wohl, wenn du dieses kleine Template nutzt:

C-/C++-Quelltext

1
2
3
4
5
6
template<class T> inline std::string toStr(T x)
{
    std::stringstream type;
    type << x;
    return type.str();
};

und zwar so:

C-/C++-Quelltext

1
StringScore.SetText("Score: "+toStr(Score));


edit: oder du machst es so wie TrommlBomml :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

6

30.05.2011, 18:26

Oder du benutzt boost. Das bietet für dein Problem lexical_cast, mit dem das so aussähe:

C-/C++-Quelltext

1
 StringScore.SetText("Score: " + boost::lexical_cast<std::string>(Score)); 
und format:

C-/C++-Quelltext

1
 StringScore.SetText(str(boost::format("Score: %1%") % Score)); 

Für den einfachen Fall wäre es natürlich Overkill, extra boost zu installieren, aber falls du (nachdem du erstmal die Standardbibliothek beherrst) auch andere Bibliotheken von boost brauchst (und es bietet viele), könnte sich ein Blick darauf lohnen (imho sollte jeder C++ Programmierer boost kennen).

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Oberon« (31.05.2011, 19:15) aus folgendem Grund: Syntax für boost::format korrigiert (%1 -> %1%)


7

04.06.2011, 19:02

Danke für die vielen Tipps die Variante von TrommlBomml ist für mich am einfachsten. Ich mag nämlich keine templates =D und Boost zu installieren habe ich gerade keine Lust =D. Aber trotzdem schaue ich es mir mal an vielleicht finde ich ein paar Funktionen die ich noch gebrauchen kann.

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

8

05.06.2011, 20:26

Wie schon gesagt, wäre es auch völlig übertrieben extra deswegen boost zu installieren (obwohl es einfach ist dauert doch das Herunterladen und auch das Kompilieren mancher Libs (die meisten sind aber Header-only) ziemlich lange).

Ich mag nämlich keine templates =D[...].

Du musst Templates nur *sehr* oberflächlich verstehen um sie anwenden zu können; ich glaube es gibt kaum jemanden der die ganze Template-Magie von boost versteht.
Templates sind imho *die* Stärke von C++, wenn man die nicht (zuminest benutzen) mag sollte man sich besser andere Sprachen aussuchen.

Werbeanzeige