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

21

08.03.2009, 16:36

Doch nicht #include "Game.hpp" in Game.cpp includieren??
Das macht doch keinen Sinn.
Schreib #include "Text.hpp" in die Game.hpp, da wo auch

C-/C++-Quelltext

1
2
#include "Player.hpp"
#include "Asteroid.hpp"


steht.

//EDIT:
Und das CText *m_pText kommt auch nicht in de Konstruktor, sondern tu das mal in die Game.hpp in due private Variablen dazu.
------------------

Jonny :)

baz

Frischling

  • Private Nachricht senden

22

08.03.2009, 16:46

Weis auch nicht wieso ich es darein geschrieben hab(Game.hpp), ändert aber nichts.
In die Initialisierungsliste hab ich nicht mehr geschafft zu schauen.
Bin jetzt erstmal bis Donnerstag Abend weg.

baz

Frischling

  • Private Nachricht senden

23

08.03.2009, 16:52

Danke für die Antworten, stimmt ganz schön dumme Fehler.
Jetzt nur noch eine Fehlermeldung:

Quellcode

1
2
3
4
5
6
7
8
--------------------Konfiguration: SDL_Game - Win32 Debug--------------------
Kompilierung läuft...
Game.cpp
c:\projekte\spielms\game.cpp(53) : error C2601: 'RenderText' : Lokale Funktionsdefinitionen sind unzulaessig
main.cpp
Fehler beim Ausführen von cl.exe.

SDL_Game.exe - 1 Fehler, 0 Warnung(en)

24

08.03.2009, 17:01

Zitat von »"KeksX"«

Vielleicht hat sich irgendwo ein ";"-Fehler eingeschlichen...

baz
Ein Semikolon zuviel, oder eins zuwenig?
fka tm

25

08.03.2009, 17:16

Du hast RenderText (const char *Text) in Game.cpp definiert.
Soweit ich das sehe

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
void CText::RenderText (const char *Text)
{
    SDL_Color m_Color = {0,0,0};
    SDL_Surface *TextToRender = NULL; // Text, der später gerendert wird

    TextToRender = TTF_RenderText_Solid(m_pFont, Text, m_Color);
    SDL_BlitSurface(TextToRender, NULL, m_pScreen, &m_Pos);
} // RenderText



  // Spiel läuft

  m_bGameRun = true;

} // Init[ 


sogar noch in der Init-Funktion von CGame.
Du solltest diese Funktion, den Konstruktor und Destruktor aber in einer
separaten Text.cpp deklarieren.

Lies dir evtl noch einmal das Kapitel 7.3 ("Ordnung muss sein") im Buch durch, da steht dass noch einmal.
Hoffe ich habe das richtig "gelesen" aus der Fehlermeldung.
------------------

Jonny :)

26

08.03.2009, 17:36

Sehe grade, das eine geschweifte Klammer zu viel ist.

C-/C++-Quelltext

1
} // RenderText 
fka tm

27

08.03.2009, 17:57

Zitat

Sehe grade, das eine geschweifte Klammer zu viel ist.


Ich glaube eher, dass er RenderText in der CGame::Init() Funktion
definiert hat (heißt das bei Funktionen auch deklarieren und definieren?) .

Weil am Ende steht noch ein

C-/C++-Quelltext

1
 // Init[ 
und am Ende der Funktion steht auch ein m_bGameRun = true;
[/cpp]
------------------

Jonny :)

28

08.03.2009, 18:08

Bin mir da nicht so sicher, Jonny.
Was er wo deklariert (Funktionsprototyp) oder definiert hat.
Auf jeden Fall mutiert das Ganze mittlerweile zu einem ziemlichen Flickwerk. :?

"So es chrüsimüsi, Chrut und Rüebli dure'nand..."
(Beneroth, CH)
fka tm

29

08.03.2009, 18:42

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

#include "Framework.hpp"
#include "SDL_ttf.h"

class CText
{
public:
    CText ();
    ~CText ();
    void RenderText (const char *Text, int XPos, int YPos);
    void RenderText (const char *Text, int Color_R, int Color_G, int Color_B, int XPos,                      int YPos);
    /*void RenderText (const char *Text, int Color_R, int Color_G, int Color_B, int XPos,                      int YPos, const char *FontName, int Fontsize);*/

private:

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

    SDL_Surface *m_pText;          // Zeiger auf den Text, der anzuzeigen ist

    SDL_Color m_Color;             // Farbe des Textes

    SDL_Color m_BackgroundColor;   // Farbe des Hintergrundes

    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
#include "Text.hpp"

//CText

//

//Aufgabe: Screen-Pointer übergeben

//

CText::CText ()
{
    m_pScreen = g_pFramework->GetScreen ();
    TTF_Init ();
    m_pFont = TTF_OpenFont("Data/KingArthur.ttf", 28);
     //Da musst du DEIN (!!) Font reintun...


} // CText



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



// RenderText

//

// Aufgabe: Text auf den Bildschirm ausgeben (Standard)

//

void CText::RenderText (const char *Text, int XPos, int YPos)
{
    m_Rect.x = XPos;
    m_Rect.y = YPos;
    SDL_Color m_Color = {255, 255, 255};
    SDL_Surface *TextToRender = NULL; // Text, der später gerendert wird

    TextToRender = TTF_RenderText_Solid (m_pFont, Text, m_Color);
    SDL_BlitSurface(TextToRender, NULL, m_pScreen, &m_Rect);

} // RenderText


void CText::RenderText(const char *Text, int Color_R, int Color_G, int Color_B, int XPos, int YPos)
{
    m_Rect.x = XPos;
    m_Rect.y = YPos;
    SDL_Color m_Color = {Color_R, Color_G, Color_B};
    SDL_Surface *TextToRender = NULL;
    TextToRender = TTF_RenderText_Solid (m_pFont, Text, m_Color);
    SDL_BlitSurface (TextToRender, NULL, m_pScreen, &m_Rect );

}

/*void CText::RenderText(const char *Text, int Color_R, int Color_G, int Color_B, int XPos, int YPos, const char *FontName, int Fontsize)
{
    TTF_CloseFont (m_pFont);
    TTF_Init();
    m_pFont = TTF_OpenFont (FontName, Fontsize);
    m_Rect.x = XPos;
    m_Rect.y = YPos;
    SDL_Color m_Color = {Color_R, Color_G, Color_B};
    SDL_Surface *TextToRender = NULL;
    TextToRender = TTF_RenderText_Solid (m_pFont, Text, m_Color);
    SDL_BlitSurface (TextToRender, NULL, m_pScreen, &m_Rect );

} */ 



was neu sein muss in Game.hpp:

C-/C++-Quelltext

1
2
3
4
#include "Text.hpp"  //muss oben zu den anderen includes


CText   *m_pText;                   //Zeiger auf die CText Klasse

                                              //muss zu den private Variablen


was neu sein muss in Game.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 m_pText = NULL;  // im Konstruktor CGame::CGame()


 //Instanz eines Textes

  m_pText = new CText ;  // in der Init Funktion von CGame


  if (m_pText != NULL)     //das in die Quit Funktion von CGame

  {
      delete (m_pText);
      m_pText = NULL;
  }

  //Beliebigen Text rendern   

  m_pText->RenderText("Hier dein Text", 173, 18, 211, 600, 30);   
  //Das in die Run-Funktion von CGame



So das ist alles was du haben musst.
Und natürlich die SDL_ttf linken.



@TrikkieMikkie:
Du kennst dich ja besser aus.
Weist du wieso die 3. RenderText- Funktion in CText (die mit 8 Parametern) ned funzt. Ich habe die jetzt als Kommentar gemacht.
Es funktioniert auch soweit, nur übernimmt des dann für alle Texte die ich abbilde dieses Font und diese Schriftart.
Ich möchte aber, dass die anderen weiterhin mit dem Standard-Font und der Standard Größe abgebildet werde, nur wenn ich das explizit angebe, soll für diesen Text eben dieses Font und diese Schriftart übernommen werden.

Weist du was ich falsch mache?
Ich nämlich nicht^^
------------------

Jonny :)

30

08.03.2009, 18:54

Zitat von »"JoNnY"«

Du kennst dich ja besser aus.


Danke für die Blumen! Nur habe ich von der SDL sowas von keine Ahnung.

Sei's drum.
Du erstellst den Font jedesmal neu? (Beim Rendern :shock: )

C-/C++-Quelltext

1
2
3
4
5
6
void CText::RenderText(const char *Text, int Color_R, int Color_G, int Color_B, int XPos, int YPos, const char *FontName, int Fontsize)
{
    TTF_CloseFont (m_pFont);
    TTF_Init();
    m_pFont = TTF_OpenFont (FontName, Fontsize);
}
fka tm

Werbeanzeige