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

02.06.2008, 17:52

Kapitel 12 SDL Spiel Umbau: Bild wird nicht geladen..

Hi,

Nachdem ich nun komplett mit dem Buch durch bin wollte ich ein wenig mit dem Quellcode aus Kapitel 12 herumexperiementieren und ein eigenes Projekt starten.

Dazu hab ich mir die Klassen : Timer, Framework, Sprite und Singleton in ein eigenes Projekt kopiert.

Nun sieht meine Main Funktion so aus:

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
#include "framework.hpp"
#include "Sprite.hpp"

int main (int argc, char *argv[])
{
    // Framework initialisieren 

    if (g_pFramework->Init (800, 600, 16, true) == false)
    return (0);

    CSprite *SpriteBackground;

     SpriteBackground = new CSprite;

     SpriteBackground->Load("Data/Background.bmp");


    int  blub = 0;

    while ( blub != 1)
    {
        g_pFramework->Update ();
        g_pFramework->Clear ();

        SpriteBackground->Render ();
    }
  
    return (0);

}



Leider kommt das Programm nur bis zu der FUnktion:

C-/C++-Quelltext

1
SpriteBackground->Load("Data/Background.bmp");


Weil das Bild nicht nicht geladen wird..

Hier nochmal die Funktion:

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
// Load

//

// Aufgabe: Einfaches, nicht animiertes Sprite laden

//

void CSprite::Load (const string sFilename)
{
  // Bitmap laden

  m_pImage = SDL_LoadBMP (sFilename.c_str () );

  // Prüfen, ob alles glatt ging

  if (m_pImage == NULL)
  {
    cout << "Fehler beim Laden von: " << sFilename.c_str ();
    cout << endl;
    cout << "Fehlermeldung: " << SDL_GetError () << endl;

    // Framework herunterfahren

    g_pFramework->Quit ();

    // Gesamtes Spiel beenden

    exit (1);
  }

  // Rect initialisieren

  m_Rect.x = 0;
  m_Rect.y = 0;
  m_Rect.w = m_pImage->w;
  m_Rect.h = m_pImage->h;

} // Load


Ich hoffe das reicht, um mir zu helfen. Wenn dies nicht der Fall ist bin ich gerne bereit Screenshots zu machen oder bestimte Codeabschnitte hier noch zu veröffentlichen. Ich hab aber wie oben erwähnt eigentlich nur die Sachen aus dem Anwendungsbeispiel des Buches kopiert, weshalb der meiste Quelltext ja bekannt sein sollte :)

Noch als Ergänzung:

Also der Pfad ist richtig und die Datei auch.. Ich habe in dem Projektordner also, wo die ganzen cpp und hpp Datein sind einen Ordner gemacht, den ich "Daten" genannt habe und dort befindet sich die auch schon im Anwendungsbeispiel benutze Bilddatei.. Die ja genau den Dateinamen und das angegebene Format hat..

Der aus der SDL_GetError () Funktion resultierende Fehler ist: Couldn't not open Data\Background.bmp

Was mich ja nich wirklich weiter bringt :(


Also würde mich über Hilfe freuen :)

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

02.06.2008, 18:04

Tipp ins blaue: Er hat die Datei nicht gefunden. Du hattest ja auch schon Probleme mit der SDL.dll. Wenn du das mittlerweile gelöst hast:
Deine Resourcen (Bilder etc) werden vom gleichen Pfad ausgehend gesucht, wie die DLL.

3

02.06.2008, 20:04

Hi nochmal,

Dein Tipp ins Blaue scheint richtig zu sein ;)

Das Problem mit dem nicht finden der SDL, hab ich vorher so gelöst, dass ich im Arbeitsverzeichnis, den lib Ordner der SDL angegeben habe:

""C:\Program Files\Projects\SDL-1.2.8\lib"

Nun habe ich alle in diesem ordner befindlichen Datein, "waren 4 Stück darunter auch die SDL.dll" in meinen Projekt Ornder kopiert, da wo auch die Header und Code Datein sind. Nun hab ich eben diesen Ordner als Arbeitsverzeichnis angegben:

C:\Program Files\Projects\SDL_Game\Super_Engine_01"

Da sich im selben Ordner nun auch, der Ordner Daten befindet, wird das Bild richtig geladen. Zumindest macht es stark den anschein, da ich keine Fehlermeldun mehr in der Konsole bekomme :)

So weit, so gut. Nun wird der Hintergrund allerdings immer noch nicht angezeigt. Er bleibt komplett Schwarz..

Sprich:

C-/C++-Quelltext

1
SpriteBackground->Render (); 

Das hier scheint irgendwie nicht richtig zu funktionieren "Siehe auch main Funktion erster Post"

Werbeanzeige