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

04.08.2014, 00:59

SFML -> Text wird nicht ausgegeben.

Hallo,

ich bin ganz neu im Forum und hoffe ich habe das richtige gewählt :).

Zu meinem Problem, ich entwickle gerade ein kleines Karten Spiel und möchte wenn ich über die Textur meiner auf der Hand befindlichen Karten streiche (mit Maus) dessen Wert und Farbe ausgeben.

Eigentlich habe ich alles gemacht wie immer nur mit ein paar for-schleifen.
hier mal mein Quellcode:

Im Konstruktor meines Gameplates habe ich erstmal das Font geladen:

C-/C++-Quelltext

1
font.loadFromFile("assets\\fnt\\Adventure.ttf");


Nun in meiner Upload - Methode, habe ich die Schriften geladen (den Wert und Farbe) - dieser Teil wird nur einmal aufgerufen für jedes "austeilen" der Karten:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
for(int i = 0; i < playerVec[0]->getKarte().size() ; i++)  //im PlayerVec befinden sich alle Player playerVec[0] bin ich. getKarte() gibt mir meine Karten auf der Hand zurück. 
        {
            sf::Text * textPtr = new sf::Text;
            string k = playerVec[0]->getKarte()[i]->getFarbe() +playerVec[0]->getKarte()[i]->getWert(); // Lade ich den Wert und Farbe in ein String. Der einzelnden Karte auf der Hand
            textPtr->setFont(font); // lade das font
            textPtr->setCharacterSize(10); // setze groesse 
            textPtr->setString(k); // lade das String in den Text
            textPtr->setPosition(spriteVec[i]->getPosition().x + 10,spriteVec[i]->getPosition().y + 50); // SpriteVec = Sprites auf denen ich die Texturen geladen habe von der Hand. 
            textVonKarten.push_back(textPtr);  // Speichere den Text in einen Vektor
        }


Dann rufe ich AUCH in der Update - Methode folgendes auf: Wird jedes mal aufgerufen:

C-/C++-Quelltext

1
2
3
4
5
6
7
for(int i = 0; i < playerVec[0]->getKarte().size() ; i++) //wie oben
    {
        if(spriteVec[i]->getGlobalBounds().contains(sf::Mouse::getPosition(game.window).x, sf::Mouse::getPosition(game.window).y)) // überprüfe ob Maus sich über Karte befindet
        {
            game.window.draw(*textVonKarten[i]); // (*)  zeichne den Text an oben definierter Stelle
        }
    }


Nun ich habe schon etliche male alles ausprobiert. Und ich komme auch in (*) diese Zeile.
Anscheinend lädt er den String nicht richtig. Ich möchte das alles nicht einzelnd eingeben, deswegen habe ich eine For schleife konstruiert.

Ich hoffe ihr könnt mir weiter helfen ^^

LG Doktor Gauß

2

04.08.2014, 01:41

Wenn du dir da so sicher bist, warum setzt den Text aka String nicht fürs Debugging mal auf einen klaren Wert z.B. "Hallo".
Dir kann da keiner helfen, sieht so zwar ultra eklig aber ok aus.

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

04.08.2014, 06:54

Ach Check, bist Du heute aber wieder freundlich...

Hallo, Doktor Gauß :)

Zunächst mal würde ich testen, ob das Laden des Fonts wirklich funktioniert hat und nicht eventuell falsche Pfad-Angaben irgendwo vorliegen. So, wie der Pfad da steht, kann ich mir das nämlich sehr gut vorstellen.
Auch möchte ich empfehlen die Positionen und den Text zu überprüfen. Entweder mit dem Debugger oder einer simplen Konsolen/Log-Ausgabe. Dann würde ich noch testen, dass unten wirklich überhaupt in das IF rein gesprungen wird.

Und zum Schluss: Es heißt der String und der Font und "einzeln" statt "einzelnd" ;)
Ein "ich habe alles richtig gemacht" würde ich mir als Programmierer ganz schnell abgewöhnen. Als Programmierer macht man diverse Fehler. Jeden Tag. Wäre alles richtig, wärst Du ja nicht hier :)
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]

4

04.08.2014, 11:02

Heyho,

vielen Dank für die Rückmeldung.

Zitat

Wenn du dir da so sicher bist, warum setzt den Text aka String nicht fürs Debugging mal auf einen klaren Wert z.B. "Hallo".


habe ich getan, leider nichts gebracht.

Zitat

Zunächst mal würde ich testen, ob das Laden des Fonts wirklich funktioniert hat und nicht eventuell falsche Pfad-Angaben irgendwo vorliegen. So, wie der Pfad da steht, kann ich mir das nämlich sehr gut vorstellen.

Also ich habe dieses font schon mehrfach vorher benutzt und es hat auch gut geklappt. Wieso? Wie könnte ich denn den Pfad noch schreiben?

Zitat

Dann würde ich noch testen, dass unten wirklich überhaupt in das IF rein gesprungen wird.

Das Programm springt hier ganz sicher rein. Habe einen Haltepunkt dort angesetzt und sobald ich über einer der Karten gehe, springt er rein. Auch der Iterator hat den richtigen Wert.

Zitat

Auch möchte ich empfehlen die Positionen und den Text zu überprüfen. Entweder mit dem Debugger oder einer simplen Konsolen/Log-Ausgabe

Also die Sprites haben folgende Position:
x: 336 + (i*73)
y: 616
Dabei haben die Sprites eine Größe von 71 x 96 Pixel
Nun die Position der Textausgabe.
1. x: 346 y: 666
2. x: 419 y: 666
usw
Müsste eigentlich passen oder? Die Position vom Sprite ist ja die obere linke Ecke?

Zitat

sieht so zwar ultra eklig aber ok aus.

Wie könnte ich das ganze denn schöner schreiben? Bin frischer Einsteiger was SFML angeht, vielleicht kannst Du mir ein paar Tipps geben :)

Zitat

Ein "ich habe alles richtig gemacht" würde ich mir als Programmierer ganz schnell abgewöhnen. Als Programmierer macht man diverse Fehler. Jeden Tag. Wäre alles richtig, wärst Du ja nicht hier :)

Das ist natürlich klar, ich meinte damit nur, dass ich alles wie immer gemacht habe :).


Zitat

Und zum Schluss: Es heißt der String und der Font und "einzeln" statt "einzelnd" ;)

Oh dann weiß ich das jetzt auch, wird hoffentlich nicht mehr passieren. Danke dafür =)


Liebe Grüße Doktor Gauß

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

04.08.2014, 11:11

Also ich habe dieses font schon mehrfach vorher benutzt und es hat auch gut geklappt. Wieso? Wie könnte ich denn den Pfad noch schreiben?
Was ich damit meine ist, dass je nachdem welche Einstellungen für Pfade der Debugger hat, er das File findet oder nicht. Hast Du mal geschaut, ob der Font erfolgreich geladen wurde?
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]

6

04.08.2014, 11:13

Zitat

Was ich damit meine ist, dass je nachdem welche Einstellungen für Pfade der Debugger hat, er das File findet oder nicht. Hast Du mal geschaut, ob der Font erfolgreich geladen wurde?


Wie kann ich das überprüfen? =)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

04.08.2014, 11:15

Font::loadFromFile liefert einen Boolean zurück.
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

04.08.2014, 11:26

Die Konsole gibt mir 5 (5 Karten auf der Hand) mal:

Font geladen? : 1

aus :(

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

04.08.2014, 12:22

Die Textfarbe is aber nicht schwarz auf schwarz, um mal ganz triviale Sachen auszuschließen? ;)
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]

10

04.08.2014, 12:43

Die Textfarbe is aber nicht schwarz auf schwarz, um mal ganz triviale Sachen auszuschließen? ;)

Das ist gar nicht so trivial, bei SFML ist die Standard Textfarbe nämlich Weiß, er sollte also prüfen ob der Text nicht auf einem weißen Hintergrund ist. ^^
Ist mir auch schon mal passiert, war eine total bescheuerte Fehlersuche, weil man halt irgendwie durch Word und co. automatisch denkt das die Standard Textfarbe Schwarz sein müsste. :P

Werbeanzeige