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

KeksX

Community-Fossil

  • »KeksX« ist der Autor dieses Themas

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

1

08.02.2009, 20:32

12. Kapitel durch, nun Experimentierprobleme[Meine Lösung]

Für alle, die meine Lösung benutzen wollen.(Da ja doch immer wieder Probleme auftreten...)
SDL_ttf.lib muss gelinkt werden !!

Die SDL TTF ist hier herunterzuladen. (Die Source-Dateien)
Standardmäßig die Verzeichnisse in eurer IDE angeben.


Text.hpp:

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
#ifndef TEXT_HPP
#define TEXT_HPP

//  KeksX: CText
//
// Aufgabe: Ausgabe von Text

#include  "Framework.h"
#include "SDL_ttf.h"
#include <sstream>

class  CText
{
public:
    CText ();
    ~CText ();

    void  RenderText (const char *Text, int XPos, int YPos, int Color_R, int  Color_G, int Color_B);
    void RenderInteger (int Integer, int XPos,  int YPos, int Color_R, int Color_G, int Color_B);

private:

    SDL_Surface *m_pScreen;// Zeiger auf den Screen des Frameworks

    TTF_Font *m_pFont;// Zeiger auf die Schriftart
    SDL_Rect m_Rect; // Rect des Textes

};

#endif


Text.cpp:

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//  KeksX: Text

#include "Text.hpp"


// CText
//
//  Aufgabe: Screen-Pointer übergeben
//
CText::CText ()
{
    m_pScreen = g_pFramework->GetScreen ();
    TTF_Init ();
    m_pFont =  TTF_OpenFont("Res/Font/GameFont.TTF", 32);
} // CText

CText::~CText  ()
{
    TTF_CloseFont(m_pFont);
    TTF_Quit ();
}


//  RenderText 
//
// Aufgabe: Text rendern
void CText::RenderText  (const char *Text, int XPos, int YPos, int Color_R, int Color_G, int  Color_B)
{
    SDL_Surface *m_pText;

    m_Rect.x = XPos;
    m_Rect.y = YPos;

    SDL_Color m_Color = {Color_R, Color_G, Color_B,  0};
    m_pText = TTF_RenderText_Solid(m_pFont, Text, m_Color);

    SDL_BlitSurface(m_pText, NULL, m_pScreen, &m_Rect);

    //  Sicheres freigeben
    if (m_pText != NULL)
    {
        SDL_FreeSurface(m_pText);
    }

} // RenderText

//  RenderInteger
//
// Aufgabe: Rendert einen Integer
void  CText::RenderInteger (int Integer, int XPos, int YPos, int Color_R, int  Color_G, int Color_B)
{
    SDL_Surface *m_pText;

    m_Rect.x =  XPos;
    m_Rect.y = YPos;

    std::stringstream Text;
    Text.clear();
    Text.str( "" );
    Text << Integer; // String  die Punkte übergeben

    SDL_Color m_Color = {Color_R, Color_G,  Color_B, 0};

    m_pText = TTF_RenderText_Solid(m_pFont,  Text.str().c_str(), m_Color);

    SDL_BlitSurface(m_pText, NULL,  m_pScreen, &m_Rect);

    // Sicheres freigeben!
    if (m_pText  != NULL)
    {
        SDL_FreeSurface(m_pText);
    }

}//  RenderInteger

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »KeksX« (30.03.2010, 18:16)


2

09.02.2009, 06:55

Hi KeksX,

mir ist beim Überfliegen des Codes folgendes aufgefallen:

C-/C++-Quelltext

1
2
3
// KeksX: Text initialisieren

    m_pText = new CText;
    g_pText->Init ();  


Du instanziierst m_pText (new CText ), rufst dann aber die Init- und Render-Methode von g_pText auf ?
fka tm

KeksX

Community-Fossil

  • »KeksX« ist der Autor dieses Themas

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

3

09.02.2009, 16:39

Hey TrikkieMikkie,
das ist in der Tat recht sinnlos...
Danke für den Hinweis!
Ich habe den Code mal abgeändert, doch leider bleibt das Problem bestehen...

Das gesamte Spiel(jedenfalls der Rohbau dieses Spieles) funktioniert wunderbar, doch es ist einfach kein Text zu sehen :/...


MfG, KeksX.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

4

09.02.2009, 16:52

Existiert die TTF-Datei auch wirklich mit exakt diesem Dateinamen an genau diesem Ort?

KeksX

Community-Fossil

  • »KeksX« ist der Autor dieses Themas

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

5

10.02.2009, 16:44

*Sich 100 mal vor den Kopf stoß*
Die dümmsten Fehler entdeckt man nie !
TTF_Init (); wurde nicht aufgerufen ....

Bitte entschuldigt, falls sich einige den Kopf zerbrochen haben.(Ich jedenfalls habe die Wand nun zerbrochen. :lol: )

Vielen Dank für eure Hilfe, der Text kommt jetzt aus seinem Loch gekrochen :].

KeksX

Community-Fossil

  • »KeksX« ist der Autor dieses Themas

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

6

19.02.2009, 21:42

Ich nochmal(probleme mit Variablenausgabe...)

Huhu! Ich mal wieder ;).

Ich habe jetzt wieder etwas Zeit gehabt weiterzumachen, nachdem ich noch einmal ein wenig im Buch studiert habe um Wissen zu festigen.

Jetzt geht es weiter: Doch ich stoße auf ein riesen Problem, bei der Ausgabe von Variablen-Werten..
SDL_TTF's Funktion TTF_RenderTextSolid ( und alle anderen ) erwarten const char* - Typen, aber wie soll ich denn bitte einen Inteeger in const char* casten?Das würde doch zu völlig falschen Ergebnissen führen(es geht ja sowieso nicht..)

Hat da jemand ne Idee?(Die Frage ist total unnötig da ihr sicherlich wisst wie man das macht, aber ich jedenfalls nicht :/...Könnt ihr mir helfen?)


Achja: Sorry für den DoppelPost aber ich finde, dass die beiden Themen gut zusammenpassen.

MfG

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

19.02.2009, 21:44

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <sstream>
...

std::stringstream s;
int zahl = 2;

s << zahl;

const char* c = s.str().c_str();

KeksX

Community-Fossil

  • »KeksX« ist der Autor dieses Themas

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

8

19.02.2009, 21:49

Schnell und unkompliziert - ich mag dieses Forum :].


Dankesehr!

9

23.02.2009, 13:02

Keks, du hast ja die SDL_ttf verwendet.
Ich habe mir die jetzt mal heruntergeladen,
und da sind ja 4 Quellcodedateien (SDL_ttf.c, SDL_ttf.h, glfont.c, showfont.c)
enthalten und lauter so dateien die ich nicht öffnen kann.

Wie verlinke ich das jetzt, weil ich habe mal versucht deinen Code zu compilieren, aber da kommt immer sofort dass die SDL_ttf.h nicht gefunden wurde.
Was muss ich bei den Einstellungen verändern damit das funktioniert?
Und wo genau muss das TTF_Init() dann stehen?
------------------

Jonny :)

KeksX

Community-Fossil

  • »KeksX« ist der Autor dieses Themas

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

10

23.02.2009, 15:58

Aaalso ich habe es mir da ein wenig einfahc gemacht und von
http://www.libsdl.org/projects/SDL_ttf/
die Source runtergeladen und in meinen allgemeinen SDL-Ordner gespeichert.
Dann habe ich MSVC++ die include und lib Pfade angegeben.

Die Binärdateien (SDL_ttf.dll, zlib1.dll und libfreetype-6.dll) habe ich in den Ordner des Projektes gelegt. Includieren musst du dann nur noch "SDL_ttf.h".

Den Aufruf der TTF_Init() Funktion musst du nur vor der Verwendung aller TTF-Funktionen setzen ;).

Werbeanzeige