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

31

04.04.2010, 15:49

Dann stimmt bei der Funktion TTF_RenderText_Solid was nicht. Diese liefert nämlich einen NULL Pointer zurück, wenn sie nicht erfolgreich ist. Überprüf mal die Parameter mit dem Debugger, ob sie alle sinnvolle Werte haben.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

32

04.04.2010, 15:53

Ja das mach ich mal.
Ich muss nur grad einen Neustart machen weil er sich da eben schon wieder dran aufgehängt hat :cursing:

EDIT----------

So das Problem ist definitiv, dass der Kompiler keinen Zugriff auf die TTF FUnktionen hat.
Ich habe nur leider keine Ahnung warum das so ist :(

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »little_Progger« (04.04.2010, 18:26)


-=Andreas=-

unregistriert

33

04.04.2010, 18:49

Worum gehts denn jetzt eigentlich um die Pause Funktion oder darum Text auszugeben?

-=Andreas=-

unregistriert

34

04.04.2010, 19:16

Also... Ich beziehe mich jetzt mal auf das Problem mit der Pause!

Ich beschreibe hier mal den weg wie ich es gemacht habe - ist vielleicht nicht die beste Lösung aber bei mir funktioniert es.

Ich habe in der ProcessEvents Funktion eine bool Variable m_bGamePause bei Tastendruck auf (z.B.) PAUSE auf true gesetzt.

Jetzt habe ich in der Run Funktion alles mit if(m_bGamePause==false){} ausgeklammert was man auch ausklammern kann.
Also was nicht ausgeklammert werden darf ist g_pFramework->Flip ().

Dann habe ich eine while Schleife in die Run Schleife geschrieben die bei m_bGamePause==true die Funktion g_pTimer->ResetTimer() aufruft + die Funktion ProcessPauseEvents.

Zur ResetTimer() Funktion:

m_fPauseTime = SDL_GetTicks() / 1000.0f - m_fLastTime;

diese m_fPauseTime wird dann später immer von der CurTime abgezogen.

m_fCurTime = SDL_GetTicks() / 1000.0f - m_fPauseTime;


Zur ProcessPauseEvents:

Die sieht so ähnlich aus wie die ProcessEvents Funktion nur das du bei drücken auf (z.B.) p die m_bGamePause
wieder auf false setzt.

Gruß -=Andreas=-

little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

35

04.04.2010, 20:17

Ja dafür habe ich ja schon eine Lösung.

Lösung:

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
void CGame::Run ()
{   
    // Hauptschleife des Spiels durchlaufen
    //
    while (m_bGameRun == true)
    {
        ProcessEvents ();

        // Framework updaten und Buffer löschen
        g_pFramework->Update ();
        g_pFramework->Clear ();

        switch (m_Gamestate)
        {
        case 0:
            {
                NormalGameRun ();
            }break;
        case 1:
            {
                PausedGameRun ();
            }break;
        }

        // Buffer flippen
        g_pFramework->Flip ();
    }
} // Run


So aber nun habe ich wie du alles geschrieben, nur jetzt inkludiert der Kompiler anscheinend die SDL_ttf.h nicht mehr weil ich die Funktionen auf keine deklaration zurückführen kann.

Wo könnte den da das Problem bestehen?

EDIT-------------

@Andreas

Ich habe deine Frage oben überlesen. Sorry
Ich habe jetzt meine Text klasse so aufgebaut wie du und sie sieht auch fast so aus wie deine.
Das Problem ist oben beschrieben für ne genauere Beschreibung frag nach weil es ein bisschen hergeleitet ist um es genau zu verstehen ;)

-=Andreas=-

unregistriert

36

04.04.2010, 20:22

Hast du unter Projekt - Eigenschaftenseiten > Linker > Eingabe > Zusätzliche Abhängigkeiten die SDL_ttf.lib eingefügt?
Hast du unter Extras > Optionen > VC++Verzeichnisse die Includedateien und die Bibliotheksdateien (z.B. C:\SDL\include und C:\SDL\lib) verknüpft?

#include "SDL_ttf.h" steht bei mir in der Timer.hpp

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-=Andreas=-« (04.04.2010, 20:27)


little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

37

04.04.2010, 20:41

Zusätzliche Abhängigkeiten:
sdl.lib
sdlmain.lib
sdl_image.lib
sdl_ttf.lib

Verzeichnisse:
Alles geprüft und kein Pfad verändert.

DLL´s :
Alle vorhanden und im Debug Ordner.

Des weiteren habe ich alle Header Datein in der Timer.hpp inkludiert, da ich die TTF im Framework Initialisiere und dort auch wieder beende.

Ich hab absolut keine ahnung woran es liegen könnte, da mir der Kompiler auch keine Fehlermeuldung schreibt.
Das Fenster öffnet sich, aber bleibt schwarz und dann hängt es sich auf und meist wenn ich es über den Taskmanager schließe -was auch nicht problemlos funktioniert- hängt sich Visual Studio auch gerne mal "aufgrund eines Internen Fehlers" auf. Vista gibt mir dann die Möglichkeit das Programm zu schließen (das übliche Absturzfenster von Vista halt) doch Visual Studio hat sich dann bereits hoffnungslos aufgehängt und schließt sich nur durch einen Neustart.

Also der Code sollte in Ordnung sein. Nur woran dieses include Problem liegt weis ich leider nicht.

-=Andreas=-

unregistriert

38

04.04.2010, 20:48

Schonmal Debuggen versucht? F5? Du bekommst keine Fehlermeldung?

little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

39

04.04.2010, 21:00

Doch dort schon.

Oben findest di ein kleines Bild mit der Fehlermeldung und ich habe ja auch schon rausgefunden warum das so ist.

Ich NULL-terminiere die Pointer auf den Screen, die Message und den Font ja im Konstruktor und weise den Pointern später in den Funktionen etwas zu.
Mir ist im Debugger aufgefallen, dass screen eine Adresse hat die ich ihm ja auch zugewiesen habe.
Ich habe m_pScreen durch g_pFramework->GetScreen() als Zeiger auf den Screen initialisiert auf den ich den Text packen will.
Insane meinte dann, dass die TTF Funktionen bei Fehlschlagen der Funktion, einen NULL-Pointer zurück geben.
Nun öffne ich ja die TTF Datei mit der Funktion TTF_OpenFont, doch aus Irgendeinem Grund wird der Zeiger nicht initialisiert (in der Parameter Zeile für diese Funktion ist ALLES in Ordnung!)
Nun packe ich m_pFont den ich ja grad "initialisiert" habe, mit Text und der Farbe in den Zeiger m_pMessage.
Nur wie kann ich den Zeiger m_pMessage sauber initialisieren, wenn die Funktion gar nicht Funktionieren kann, da der Zeiger m_pFont ja immernoch die Adresse 0x00000000 hat (also nicht initialisiert ist!) :?:
Es geht nicht!
Nun habe ich nachgeschaut warum den der Zeiger, m_pFont gar nicht initialisiert wurde und mir fiel auf, dass ich die TTF-Funktionen gar nicht auf eine Deklaration (per Rechtsklick auf den Funktionsnamen -> "Gehe zu Deklaration") zurückführen konnte.

Darum denke ich das der Fehler darin besteht, aber ich habe keine ahnung warum dies so ist.

40

04.04.2010, 21:06

Ich hab ein bisschen getrickst und die Include-Datei der SDL-ttf in den SDL Includeordner kopiert, genauso beim lib-ordner. Und es hat funktioniert! :thumbup:

Sind die sdl.dll, sdl_ttf.dll, libfreetype-6.dll und zlib1.dll in deinem debug- bzw. release-Ordner?
Ist die FreeSans.ttf im Projektordner?

Werbeanzeige