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

n0_0ne

1x Contest-Sieger

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

1

15.03.2009, 12:45

[Erledigt] Text mit der SDL

Hallo,
Ich versuche grade in das Spiel aus Kapitel 12 des Buches einige Sachen einzubauen. Als erstes habe ich also einige Bugs beseitigt und versuche gerade eine Text-Klasse einzubauen...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
void CText::Init(const string sText)
{
    m_Text = sText.c_str();
    m_pFont = TTF_OpenFont("arial.ttf", 18);
    m_Color.r = 200;
    m_Color.g = 0;
    m_Color.b = 0;
    m_Color.unused = 0;
    *m_pText = TTF_RenderText_Solid(m_pFont, m_Text.c_str(), m_Color); <---- ERROR
}


Ich habe hiermit erst einmal versucht überhaupt irgendeinen Text aufs Surface zu bringen, bekomme aber immer das hier:

||=== Game, Debug ===|
D:\Development\Projects\Game\Text.cpp||In member function `void CText::Init(std::string)':|
D:\Development\Projects\Game\Text.cpp|29|error: no match for 'operator=' in '*((CText*)this)->CText::m_pText = TTF_RenderText_Solid(((CText*)this)->CText::m_pFont, (((std::string*)((CText*)this)) + 8u)->std::basic_string<_CharT, _Traits, _Alloc>::c_str [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](), ((const SDL_Color&)((const SDL_Color*)(((SDL_Color*)((CText*)this)) + 16u))))'|
D:\Development\SDL\include\SDL_video.h|88|note: candidates are: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&)|
||=== Build finished: 1 errors, 0 warnings ===|

Und kann damit überhaupt garnix anfangen ^^ Was mache ich falsch?

Lerikson

Alter Hase

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

2

15.03.2009, 13:16

ich bin leider selber SDL Anfänger aber das hier könnte vielleicht helfen :
http://lazyfoo.net/SDL_tutorials/lesson07/index.php

(das ist eine ziemlich gute Tutorialreihe und dort (link) wird erklärt wie man Text auf Surfaces bringt!)

mfg
Lennart
Errare est humanum. -Windows ist menschlich ;-)

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

3

15.03.2009, 13:22

weiß nicht obs dir hilft aber ich hab mir da eine eigene funktion für geschrieben

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool SDL_ApplyText(char text[],char fontname[],int fontsize,SDL_Surface *dst,int x, int y, short int r, short int g,short int b)
{
    SDL_Color fgcolor = {r,g,b};
    SDL_Rect offset;
    offset.x = x;
    offset.y = y;
    TTF_Font *font = NULL;
    SDL_Surface *textsurface = NULL;
    font = TTF_OpenFont(fontname,fontsize);
    textsurface = TTF_RenderText_Solid(font,text,fgcolor);
    SDL_BlitSurface(textsurface,NULL,dst,&offset);
    SDL_FreeSurface(textsurface);
    TTF_CloseFont(font);
    return true;
}

n0_0ne

1x Contest-Sieger

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

4

15.03.2009, 13:33

ich hab den fehler beim vergleich entdeckt, vorne hat sich irgendwie ein * eingeschlichen, was ich aus der Fehlermeldung überhaupt nicht rauslesen konnte :?: :!:

*m_pText = TTF_RenderText_Solid(m_pFont, m_Text.c_str(), m_Color);

ohne * funktioniert es, danke für die Hilfe :)

EDIT: was ich allerdings nicht verstehe, ist wieso bei dir color = {r,g,b} funktioniert, das habe ich bei mir auch versucht, aber es gibt nen compilerfehler... oder geht das mit dieser Syntax nur bei der deklaration?
EDIT2: OpenFont gibt bei mir, so wie es oben im code steht, immer nur nen nullpointer zurück, kann mir jemand sagen, wo genau die TTF datei sein muss? C:\Windows\Fonts\ reicht anscheinend nicht aus
EDIT3: hhmmm also egal was ich versuche, ich habe einfach nicht die berechtigung arial.ttf aus dem Fonts ordner zu holen.... jemand ne ahnung, was ich da machen kann?

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

5

15.03.2009, 13:59

SDL_Color ist ja eine struktur.. und ich übergib ihr einfach die parameter aus der funktion oben... weiß nicht wieso das bei dir nicht geht.. hast du vielleicht ( anstatt { benutzt ?

bzw wie sieht den die fehlermeldung dabei aus ? vielleicht kann ich dir dabei helfen.

also meine ttf dateien sind in meinem projekt ordner, also gleich bei dem sourcecode

wenn ich nen neuen text schreiben will mach ich einfach:

C-/C++-Quelltext

1
SDL_ApplyText("Hello World!","arial.ttf",28,screen,2,2,255,255,255); 

n0_0ne

1x Contest-Sieger

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

6

15.03.2009, 14:06

Habe es soeben geschafft (nach etwa 10 Minuten ^^) arial.ttf aus dem Fonts ordner zu entnehmen.... und somit auch meinen ersten Text auf surface gezaubert :D

zu der struktur: ich habe geschrieben: m_Color = {255,255,255,0};
(0 für unused, aber auch ohne 0 den gleichen fehler)

Fehlermeldungen (aus der gleichen zeile):
expected primary-expression before '{' token
sowie
expected `;' before '{' token

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

7

15.03.2009, 14:16

gehts auch nicht wenn du einfach schreibst:

SDL_Color m_Color = {255,255,255};

eben deklarieren und definieren in einem

n0_0ne

1x Contest-Sieger

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

8

15.03.2009, 14:34

ja, das war bereits meine vermutung, ich denke dann geht es, aber ich hab eben schon wo anders deklariert und würde das gerne öfters ändern.... aber wie auch immer, es funktioniert ja, das ist erstmal die hauptsache :D

also danke für die Hilfe :D

Werbeanzeige