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

baz

Frischling

  • »baz« ist der Autor dieses Themas
  • Private Nachricht senden

1

22.12.2008, 16:18

Problem mit Textausgabe

Ich habe vor ein paar angefangen das SDL_Game weiter auszubauen.
Bis jetzt habe ich nur die Animation und die Auflösungen der Grafiken verändert. Nun wollte ich den Punktestand als Textausgabe auf den Bildschirm bringen, immer wenn der Laser mit einem Asteroiden kollidiert, sollen Punkte dazukommen. Ich habe mich auf verschiedensten Seiten informiert,(z.B. über SDL_ttf.h) weis aber noch nicht wie ich es gut einbauen kann. Es wäre schön wenn mir einer helfen könnte, weil ich schon viel probiert hab und nur Fehlermeldungen zustande gekommen sind.

2

22.12.2008, 16:26

welche Fehlermeldungen?
was hast du probiert?

3

29.03.2009, 18:11

Ich kenn mich nicht so mit SDl aus, aber versuch doch mal eine eigene Klasse für die Textausgaben zu bauen!

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

4

29.03.2009, 18:33

Ich kann dir mal meine TextKlasse geben, dann kannst du dir das vorgehen mal ansehen:

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

#include "Framework.hpp"

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

    void Render();
    void Init(char sText[], char sTTF[], short size, float fXPos, float fYPos, short r, short g, short b);
    void SetColor(short R, short G, short B);
    void SetPos(float fXPos, float fYPos);
    void SetText(char sText[]);

    private:
    char *m_sText;              // string of this text

    char *m_sTTF;               // string of the TTF file

    short m_Size;               // size of the text

    TTF_Font *m_pFont;          // font

    SDL_Color m_Color;          // color

    SDL_Rect m_Rect;            // rect

    SDL_Surface *m_pScreen;     // pointer to the screen of the framework

    SDL_Surface *m_pText;       // pointer to the text surface

};

#endif

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

// Constructor

// Task: Set the pointers

CText::CText()
{
    m_pScreen = g_pFramework->GetScreen();
    m_pText = NULL;
    m_pFont = NULL;
}

// Destructor

// Task: Free the surfaces

CText::~CText()
{
    SDL_FreeSurface(m_pText);
}

// Init

// Task: Initialize the Text, setting color, font and position

void CText::Init(char sText[], char sTTF[], short size, float fXPos, float fYPos, short r, short g, short b)
{
    m_Size = size;
    m_sTTF = sTTF;
    m_sText = sText;
    m_pFont = TTF_OpenFont(m_sTTF, m_Size);
    if (m_pFont != NULL)
    {
        m_Color.r = r;
        m_Color.g = g;
        m_Color.b = b;
        m_Color.unused = 0;
        m_pText = TTF_RenderText_Solid(m_pFont, m_sText, m_Color);
        m_Rect.x = static_cast<int>(fXPos);
        m_Rect.y = static_cast<int>(fYPos);
        m_Rect.w = 0;
        m_Rect.h = 0;
    }
}

// Render

// Task: Render the text into the screen

void CText::Render()
{
    SDL_BlitSurface(m_pText, NULL, m_pScreen, &m_Rect);
}

// SetPos

// Task: Set new Positon of the text

void CText::SetPos(float fXPos, float fYPos)
{
    m_Rect.x = static_cast<int>(fXPos);
    m_Rect.y = static_cast<int>(fYPos);
}

// SetColor

// Task: Set new Color

void CText::SetColor(short r, short g, short b)
{
    m_Color.r = r;
    m_Color.g = g;
    m_Color.b = b;
    m_pText = TTF_RenderText_Solid(m_pFont, m_sText, m_Color);
}

// SetText

// Task: Set new Text

void CText::SetText(char sText[])
{
    m_sText = sText;
    m_pText = TTF_RenderText_Solid(m_pFont, m_sText, m_Color);
}

Das war Text.cpp....

Bei mir hat dann die Game-Klasse private variablen CText m_ScoreText; etc, sie werden dann einmal mit

C-/C++-Quelltext

1
m_ScoreText.Init("Score: 0", "Data/arial.ttf", 22, 650, 5, 255, 255, 255);

initialisiert und danach mit

C-/C++-Quelltext

1
2
3
4
char cBuffer[100];
sprintf(cBuffer, "Score: %i", m_pPlayer->GetScore());
m_ScoreText.SetText(cBuffer);
m_ScoreText.Render();

aktualisiert....
Ob ich die Klasse so super hinbekommen hab weiß ich nicht, aber es funktioniert so jedenfalls :D

5

29.03.2009, 19:03

Ihr wisst schon das das alles ein viertel Jahr alt ist und der Fredersteller sich seitdem nicht mehr gemeldet hat?!

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

6

29.03.2009, 21:58

jetzt schon xD warum antwortet da wieder jemand drauf ^^

7

29.03.2009, 22:02

ibagei buddelt gerne alte Threads aus... ;)

physX

Treue Seele

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

8

30.03.2009, 09:46

However ich finde den post der Text-Klasse super, auch wenn der Ursprungsthread bereits ein halbes jahr alt ist :)
danke

Toxic

Frischling

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

9

30.03.2009, 23:00

Ich finde den Post auch ziemlich gut, die Textausgabe mit der SDL ist das nächste was ich mir angucken möchte und das hier wird dann meine erste Adresse sein :)

Vielen Dank an n0_0ne
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

Werbeanzeige