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

29.08.2011, 23:46

Fehler beim Sprite laden!

hiho,

will grad ledglich eine .bmp laden mit der CSprite klasse, genau so wie die im Buch ist. Hat ja nun auch schon mehrmals geklappt (beim Hintergrund und beim Player) aber diesmal nich ... hier die fehler meldung

Zitat

PEine Ausnahme (erste Chance) bei 0x00ce34dd in Pac Man.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xcdcdcdd1.
Unbehandelte Ausnahme bei 0x774615ee in Pac Man.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xcdcdcdd1.
Das Programm "[468] Pac Man.exe: Systemeigen" wurde mit Code -1073741819 (0xc0000005) beendet.


was ich schonmal nich verstehe wieso er was schreiben will da er ja eigentlich nur was laden soll :/

jedenfalls tritt das genau bei dieser zeile in der CSprite klasse auf:

C-/C++-Quelltext

1
m_pImage = SDL_LoadBMP (sFilename.c_str () );


bin mit test ausgaben drauf gekommen das es das sein muss!
erst dacht ich das es vieleicht an der datei liegt oder so, kann aber nich sein da er auch die anderen bilder nich läd die ich schonmal wo anders geladen hab ...

aufrufen tu ich das hier im Konstruktor von meiner Block Klasse

C-/C++-Quelltext

1
2
3
4
5
6
Block::Block(float xPos, float yPos)
{
    p_blockSprite->Load("sprites/bg.bmp");
    this->xPos = xPos;
    this->yPos = yPos;
}


und in meiner Map Klasse werden die Blöcke erstellt

C-/C++-Quelltext

1
2
3
4
5
if(mapData[i] == '1')
        {
            temp = new Block(xKoord, yKoord);
            blockList.push_back(temp);
        }


es is unerklärlich für mich o.O

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

30.08.2011, 00:55

Machst du nach

C-/C++-Quelltext

1
m_pImage = SDL_LoadBMP (sFilename.c_str () );
auch einen check á la

C-/C++-Quelltext

1
if (m_pImage == NULL) { printf("Error!"); }
?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

30.08.2011, 06:18

joar, wie gesagt hab die ganze klasse direkt übernommen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
// 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);
    }


aber bis dahin kommt er ja nich mal :/

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

30.08.2011, 10:13

Existiert die Datei wirklich und hast du Zugriffsrechte auf die Datei und den Ordner?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

30.08.2011, 11:00

Ja die Datei exestiert, und die liegt im Ordner wo auch die anderen sprites drin liegen die schon erfolgreich geladen wurden

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

6

30.08.2011, 11:04


C-/C++-Quelltext

1
2
3
4
5
6
Block::Block(float xPos, float yPos)
{
    p_blockSprite->Load("sprites/bg.bmp");
    this->xPos = xPos;
    this->yPos = yPos;
}


p_blockSprite wird nirgends initialisiert. Entweder du nimmst ein normales Objekt statt des Pointers oder du machst noch ein p_blockSprite = new CSprite; davor. (Dann aber delete nicht vergessen und Rule of the big three beachten.)
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

7

30.08.2011, 15:21

hmm tatsache, das hat den fehler behoben, vielen dank

aber ich hab ein weiteres problem (diesmal is keine fehler meldung :p )

und zwar erstelle ich diese Blöcke und pack sie in eine List und will die dann Rendern aber leider sieht man nix auf dem Bildschirm von meinen blöcken :/
ich hab mir alles mit testausgaben ausgeben lassen in jder funktion und er ruft auch alles auf von anfang bis zum ende nur sieht mal leider meine blöcke nich ...

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void Map::LoadMapFile()
{
    ifstream input ("map.txt");

    while(!input.eof())
    {
        string mapDataRow;
        std::getline(input ,mapDataRow);
        mapData += mapDataRow;
    }
    input.close();
}

void Map::CreateMap()
{
    float xKoord = 0.0f;
    float yKoord = 0.0f;
    
    for(int i = 0; i < mapData.length(); i++)
    {

        if(mapData[i] == '1')
        {
            Block temp (xKoord, yKoord);
            blockList.push_back(temp);          
        }

        if(xKoord < 870.0f)
            xKoord += 30.0f;
        else
        {
            xKoord = 0.0f;
            yKoord += 10.0f;
        }
    }
}

void Map::Render()
{
    for(it = blockList.begin(); it != blockList.end(); it++)
    {
        it->Render();
    }
}


bei der Methode CreateMap() berechne ich halt die Positon für die einzelnen Blöcke und den wert hab ich mir vor dem rendern der blöcke auch ausgeben lassen und die stimmen!

und hier halt ganz normal die Render Methode von der Block Klasse:

C-/C++-Quelltext

1
2
3
4
void Block::Render()
{
    p_blockSprite->Render();
}

8

30.08.2011, 17:54

schon gut hab das problem gefunden ... is mir fast schon peinlich ^^

ich hatte wegen tests statt meinen Block Sprite den hintergrund geladen und vergessen es um zu stellen ^^ naja passier :p

Werbeanzeige