Text Function funzt nicht



  • Hi,
    ich hab heute mal probiert eine kleine Textfunktion
    mit SDL_ttf zu machen, aber ich habe einen Fehler bei
    SDL_Rect, der wirkt sich leider aufs schwer aufs Programm aus, deshalb hab ich
    fünf fehler.In der SDL Documentation hab ich auch keine
    Antwort gefunden und das erste SDL_Rect geht ja auch noch.
    Sorry für meinen schrecklichen code.

    int Text(){
    SDL_Surface *TextSurface;
    SDL_Rect egal;
    
    egal.x=1024;
    egal.y=768;
    
    SDL_Rect color;
    color.r=1;
    color.g=0;
    color.b=0;
    
    TTF_Font *pFont;
    pFont = TTF_OpenFont("Arial.ttf",12);
    TTF_CloseFont(pFont);
    TextSurface = TTF_RenderText_Solid(pFont, "Alles wird gut",&color); 
    
    SDL_BlitSurface(TextSurface,NULL,screen,&egal);
    SDL_UpdateRects(TextSurface,1,0); 
    
    SDL_FreeSurface(TextSurface);
    
    return 0;
    }
    

    Also das ist die Fehlerquelle:

    SDL_Rect color;
    color.r=1;
    color.g=0;
    color.b=0;
    

    Vielen dank im vorraus.

    cu max



  • Interessante Geschichte! Soll ich auch mal eine erzählen?

    Bye, TGGC



  • Master_Max schrieb:

    pFont = TTF_OpenFont("Arial.ttf",12);
    TTF_CloseFont(pFont);

    Du öffnest die Schriftart und schließt sie direkt danach wieder - wahrscheinlich darf man sie anschließend nicht mehr verwenden, also das TTF_CloseFont erst an's Ende packen, wenn Du die Schriftart nicht mehr brauchst!



  • Hi,
    vielen dank.
    Das könnte stimmen, werde es mal testen.
    Aber ich verstehe nicht was das mit dem
    SDL_Rect Fehler zu tuen hat.
    Nochmal danke.

    TGGC schrieb:
    Interessante Geschichte! Soll ich auch mal eine erzählen?

    Was meinst du? Ich verstehe nicht, warum
    du im moment überrall versuchst dir Feinde zu machen,
    du kannst ja helfen(du bist sehr gut, großes Kompliment 👍 )
    aber warum gehst du in Foren wenn du nicht helfen willst?
    Ich hab keinen Bock streit anzufangen, denn(den hast du im moment
    eh mit fast jedem)aber was soll dein Post?
    Eine Interresante Geschichte kannst du mir gerne erzählen.

    @alle die mit TGGC streit haben:
    Macht eine Art vertrag, TGGC darf keine Links mehr zu seinem
    Spiel stellen(erstens nicht getarnt und zweitens nicht in wildfremden
    dazu überhaupt nicht passenden Beiträgen und er soll sich mal überlegen
    das er früher genause schlecht war wie wir.)Und dafür legen wir den
    Terror gegen ihn mal bei.Ausserdem sollten wir mal die Behauptung
    TGGC hat keine Freunde fallen lassen, das ist erstens aus der Luft gegriffen
    und zweitens geht es uns falls das der Fall ist auch nichts weiter an.
    Edit:Ausserdem gehört die Internet Site weg.(auch wenn sie irgendwie lustig ist)

    cu max



  • Hi,
    ich hab den Fehler mit:

    SDL_CloseFont
    

    Ans untere Ende der Function getan,
    doch der Fehler, liegt wie schon beschrieben beim
    SDL_Rect.

    Wäre für hilfe sehr dankbar,
    vielen dank im vorraus.

    cu max



  • Hi,
    @TGGC ich sehe gerade auf deiner Side das du mal mit Darkbasic
    gearbeitet hast, wie war dein Name im Forum?(Nur aus interesse?)

    cu max



  • Master_Max schrieb:

    Hi,
    @TGGC ich sehe gerade auf deiner Side das du mal mit Darkbasic
    gearbeitet hast, wie war dein Name im Forum?(Nur aus interesse?)

    cu max

    er hatte 2

    "D.G.A.U.D.A.E.C." - Der Größte Angeber Und Das Arschloch Einer Community

    "TGGC - Gay is not enough" 😉



  • 🙂
    Kommst du auch aus dem DB Forum?
    cu max



  • Jo bin doch Jarek und muss meinen verwichsten feind TGGC ja mal feuer unterm Arsch machen, damit alle seine dunkle vergangenheit kennen. 🙂



  • SDL_Rect:

    typedef struct {
    Sint16 x, y;
    Uint16 w, h;
    } SDL_Rect;

    du musst aber SDL_Color verwenden:

    typedef struct {
    Uint8 r;
    Uint8 g;
    Uint8 b;
    Uint8 unused;
    } SDL_Color;

    cu



  • Hi,
    aha!Danke.
    cu max



  • @Master_Max:
    Du hast keine konkrete Frage gestellt, also was soll man antworten?

    Im DB Forum hiess ich auch TGGC, ich hatte noch nie ein anderes Pseudonym.

    BTW: Ich habe keinen Streit. Genies haben keinen Streit nötig.

    Bye, TGGC



  • Hi,
    meine Frage war wo der Fehler liegt, ich hatte ihn ja wie vermutet
    bei SDL_Rect, also nun SDL_Color.
    Meine Frage hätte aber doch eigentlich für ein "Genie" wie dich
    ersichtlich sein sollen. 😃

    PS:Habs noch nicht hinbekommen, muss mich ersmal mit einer Button erkennung
    beschäftigen.Vielen dank.

    cu max



  • sdlrect hat kein b schrieb:

    SDL_Rect:

    typedef struct {
    Sint16 x, y;
    Uint16 w, h;
    } SDL_Rect;

    du musst aber SDL_Color verwenden:

    typedef struct {
    Uint8 r;
    Uint8 g;
    Uint8 b;
    Uint8 unused;
    } SDL_Color;

    cu

    Tja. Das hätte ich Dir ja auch sagen können (auf mich selber sauer sei)...

    Mich hatte es auch gewundert, was ein Rectangle mit einer Farbeinstellung zu tun hat, aber da ich NULL Peil von SDL hab' hab' ich's mal lieber gelassen... 🙄



  • Master_Max schrieb:

    meine Frage war wo der Fehler liegt

    Warum hast du dann nicht einfach danach gefragt sondern behauptet "das ist die Fehlerquelle:".



  • Master_Max schrieb:

    TextSurface = TTF_RenderText_Solid(pFont, "Alles wird gut",&color);
    [/cpp]
    Vielen dank im vorraus.
    cu max

    das &color stimmt nicht, es sollte nur color heissen
    TTF_RenderText_Solid(pFont, "Alles wird besser", color);

    cu



  • Hi,
    vielen dank.
    Ich hatte mal wieder Zeit mich damit zu beschäftigen komme aber immer
    noch nicht auf den grünen Zweig. Ich hab bei Google und in vielen
    Foren gesucht finde aber kein Tutorial. Nun ja, ich habe immer noch einen
    Fehler und ich denke alles was ihr gesagt habt berücksichtigt zu haben.
    Naja, vielleicht könnt ihr mir ja helfen:
    Ein Bsp:

    #include <SDL.h>
    #include "SDL_ttf.h"
    
    //Präprozessor befehle die leider nötig sind damit SDL läuft.
    #ifdef _WIN32
    #undef main
    #endif
    
    int main(){
    	SDL_Init(SDL_INIT_VIDEO);
    	SDL_Surface *screen;
    	screen=SDL_SetVideoMode(1024,768,32,0);
        TTF_Init();
    	SDL_Surface *TextSurface;
    
    TTF_Font *pFont;
    
    typedef struct color{
    Uint8 r;
    Uint8 g;                                                            
    Uint8 b;
    Uint8 unused;
    }SDL_Color;
    
    pFont = TTF_OpenFont("Arial.ttf",12);
    TTF_CloseFont(pFont);
    TextSurface = TTF_RenderText_Solid(pFont,"Alles wird besser",&color); //es 
    //ist egal ob ich &color oder nur color schreibe,
    // ich erhalte bei beiden //den //Fehler.                                                                                                                
    
    SDL_BlitSurface(TextSurface,NULL,screen,0);
    SDL_UpdateRects(screen,1,0); 
    
    SDL_FreeSurface(TextSurface);
    
    TTF_Quit();
    
    	SDL_Delay(3000);
    	SDL_Quit();
    	return 0;
    }
    

    **
    //--------------------Konfiguration: TTF_Text - Win32 Debug--------------------
    Kompilierung läuft...
    codeTTF_Text.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\TTF_Text\codeTTF_Text.cpp(28) : error C2275: "color" : Ungültige Verwendung dieses Typs als Ausdruck
    C:\Programme\Microsoft Visual Studio\MyProjects\TTF_Text\codeTTF_Text.cpp(19) : Siehe Deklaration von 'color'
    Fehler beim Ausführen von cl.exe.

    TTF_Text.exe - 1 Fehler, 0 Warnung(en)
    **

    Ich habe doch color richtig definiert oder?
    Ich würde mich sehr über hilfe freuen.

    PS:Wegen den //´s komisch, aber die eingabe spinnt wenn ich sie schreibe,
    rücken die wörter der letzten zeile immer nach vorne.

    cu max



  • Solltest Du dann nicht SDL_Color statt color verwenden?!?



  • - du brauchst sdl_color nicht neu zu definieren, das gibts schon:) nur musst du noch eins mit deinen beliebigen werten füllen...
    - dann musst du ttf_closefont() erst nachdem du die schrift nicht mehr benötigst (ende des programms?) aufrufen.
    - es ist nicht egal ob du color oder &color übergibst.
    - mit "SDL_BlitSurface(TextSurface,NULL,screen,NULL);" blittest du dein textsurface in die linke obere ecke des bildschirms. besser wäre es, als letzten parameter ein SDL_Rect zu übergeben, in dem steht, wohin du die Schrift haben willst.

    #include <SDL.h> 
    #include "SDL_ttf.h" 
    
    //Präprozessor befehle die leider nötig sind damit SDL läuft. 
    #ifdef _WIN32 
    #undef main 
    #endif 
    
    int main(){ 
        SDL_Init(SDL_INIT_VIDEO); 
        SDL_Surface *screen; 
        screen=SDL_SetVideoMode(1024,768,32,0); 
        TTF_Init(); 
        SDL_Surface *TextSurface; 
    
    TTF_Font *pFont; 
    
    pFont = TTF_OpenFont("Arial.ttf",12); 
    SDL_Color color;
    color.r = color.g = color.b = 255; //schriftfarbe weiss
    
    TextSurface = TTF_RenderText_Solid(pFont,"Alles wird besser",color);                                                                                                          
    SDL_BlitSurface(TextSurface,NULL,screen,NULL); 
    SDL_UpdateRects(screen,1,0);  
    
    SDL_FreeSurface(TextSurface); 
    
    TTF_CloseFont(pFont);
    TTF_Quit(); 
    
        SDL_Delay(3000); 
        SDL_Quit(); 
        return 0; 
    }
    

    ich habe jetzt nicht alles ganz genau durchgesehen und auch nicht getestet, aber eigentlich sollte es so gehen.



  • Hi,
    vielen dank.
    Du bist wieder ein beweis das die unregistrierten sehr gut sind.
    @TGGC und nicht immer "Trollen"
    Nochmals danke.
    Sorry, aber ich blick nie bei der SDL Docu durch,
    vorallem eben nicht bei den Datentypen, da die nicht in
    der Deutschen Doku erklärt werden.

    cu max


Anmelden zum Antworten