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

1

03.11.2007, 21:23

Problem mit SDL Rendern

Also, einmal vornweg, da das SDL Spiel was bei dem Buch "C++ für Spieleprogrammierer" bei mir irgendwie net funktioniert (arbeite mit CodeBlocks mit MinGW Compiler) hab ich mir gedacht ich schreib halt alles neu und dann läufts vielleicht, dem ist aber leider nicht so.
Also ich hab mal ne einfach abgklatsche von dem Framework und Sprite geschrieben, doch irgendwie bleibt das programm beim Aufruf der Sprite-Memberfunktion

C-/C++-Quelltext

1
 void cSprite::Render();
irgendwie hängen. es regiert nichtmehr usw.

Hier mal die Render Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
void cSprite::Render()
{
    cout << "Test" << endl; //Ausgabe Test, um zu checken wo es hängenbleibt

    //Image / Sprite rendern

    if(SDL_BlitSurface(m_pImage, NULL, m_pScreen, &m_Rect) != 0)
        cout << "cSprite: Image erfolgreich gerendert!" << endl;
    else
    {
        cout << "Beim rendern eines Images ist ein Fehler aufgetreten! "
                "Fehler Code: " << SDL_GetError() << endl;
    }
}//Render


so, das lustige ist das es nichtmal mehr "Test" ausgibt, das heist es muss irgendwo vor / beim aufruf h#ngen bleiben. Hier mal ein ausschnit aus der Main.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
...
    cout << "Sprite wird initialisiert..." << endl;
    SpriteBackground->Init(Framework);

    cout << "Framework wird initialisiert..." << endl;
    Framework->init(300, 300, 32, false);

    cout << "Background wird geladen..." << endl;
    SpriteBackground->Load("../Data/Background.bmp");

    cout << "Position wird gesetzt..." << endl;
    SpriteBackground->SetPos(0.0f, 0.0f);

    cout << "Bildschirm wird geleert..." << endl;
    Framework->Clear();

    cout << "Sprite wird gerendert..." << endl;
    SpriteBackground->Render();

    cout << "Surface wird geflippt..." << endl;
    Framework->Flip();
...


Als letztes gibt das PRogramm noch "Sprite wird gerendert..." aus, dann hängts ca 2 sek und stürtzt ab.

Wenn ich es Debuggen will dann kommen plötzlich extrem viele Variablen adressen, und am schluss gibt der debugger dann nur noch : 00000000x0
aus. was heist das?

noch zum abschluss, das was in der stdout.txt steht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sprite wird initialisiert...
Klasse cSprite: Framework erfolgreich zugewiesen!
Klasse cSprite: Screen erfolgreich zugewiesen!
Framework wird initialisiert...
SDL erfolgreich initialisiert!
Videomodus erfolgreich gesetzt!
Framework erfolgreich initialisiert!
Background wird geladen...
Die BMP-Datei: ../Data/Background.bmp wurde erfolgreich geladen
Klasse cSprite, Funktion Load: Geladenes Image erfolgreich optimiert!
Position wird gesetzt...
Position gesetzt!
Bildschirm wird geleert...
Screen geleert!
Sprite wird gerendert...





ich hoffe ihr könnt mir helfen, bin am verzweifeln


lg chili

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

2

04.11.2007, 12:19

Hallo Chili,
ich weiß nicht wo das Problem ist, das Game läuft bei mir ohne Probleme ;)
Hast du die .lib/.a eingebunden?
Hast du die nötigen Header eingebunden?
Hast du die sdl.dll im selben Ordner wie die .exe des Games?

Wenn nicht solltest du dies tun.

Hab C::B 1 RC2 und da funkt alles ohne Probleme.
Hab auch schon vor einiger Zeit an dem Spiel rumgebastelt und hab kaum Probleme.

Hier aber mal die Render Methode wie sie sein sollte:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
// Render

//

// Aufgabe: Sprite rendern (ohne Animation)

//

void CSprite::Render ()
{
  // Sprite rendern

  SDL_BlitSurface (m_pImage, NULL, m_pScreen, &m_Rect);
}


Ist die normale Version, da ich atm noch auf Fehlerprüfungen verzichtet habe, da ich erstmal eine 08/15 2D Engine damit entwickeln möchte und auch ein kleinen Space Shooter :o) ;)

Hoffe du hast nur ein paar .libs/.a vergessen einzubinden ;)

MFG Martin
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

3

04.11.2007, 13:02

einmal danke für deine antwort (=
nein habe alle libs usw gelinkt, das problem lag daran das ich ein paar Sprites vergessen habe auf dem Heap zu erzeugen und sie deswegen verschwunden sind.
es geht jetzt auf jedenfall^^
danke

lg chili

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

4

04.11.2007, 13:58

Hallo,
wie meinst du das?
Hast du wohl die Klassen alle neugeschrieben und dabei vergessen die Sprites im Konstruktor/Inti-Methode zu erzeugen?

Hmm aber warum das nicht bei dir klappen will mit dem normalen src wundert mich.
Was gibt er den für Fehler aus wenn du versucht den normalen Spielecode zu compilieren?

EDIT
Hab noch eine Möglichkeit woran es liegen könnte:
https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=8526

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Werbeanzeige