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

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

1

12.12.2005, 17:11

Mein erstes Spiel macht gleich Probleme

Hallo,
Gerade ist das Grundgerüst für mein erstes Spiel fertiggeworden, schon liefert der Debugger einen (für mich) unerklärlichen Fehler:
First-chance exception in Buffer.exe (TRIBASED.DLL): 0xC0000005: Access Violation.
Das Update der TriBase-Engine half auch nicht weiter.Habe bei dem Programm lediglich das Beispielprogramm für Vertex - und Index-Buffer etwas geändert(daher auch Buffer.exe. Habe einfach nur Buffer.cpp rausgeschmissen)
Hier der Code, in dem der Fehler liegen muss:

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
for(int iSet = 0;iSet < g_iAnzahlLehrer * 4; iSet++)
    {
        //Vertexfarben setzen

        g_pVertexG[iSet].dwColor = (DWORD)(Farbe);
        g_pVertexG[iSet].dwColor = (DWORD)(Farbe);
        MessageBox(NULL, "Farbe gesetzt", "Strike",MB_OK);

        //Texturkoordinaten und Positionsangaben setzen

        if((iSet + 1) % 4 == 0)
        {
            //Texturkoordinaten angeben

            g_pVertexG[iSet].vTexture = tbVector2(0.0f, 1.0f);    
            g_pVertexG[iSet + 1].vTexture = tbVector2(0.0f, 0.0f);
            g_pVertexG[iSet + 2].vTexture = tbVector2(1.0f, 0.0f);
            g_pVertexG[iSet + 3].vTexture = tbVector2(1.0f, 1.0f);
            g_pVertexB[iSet].vTexture = tbVector2(0.0f, 1.0f);
            g_pVertexB[iSet + 1].vTexture = tbVector2(0.0f, 0.0f);
            g_pVertexB[iSet + 2].vTexture = tbVector2(1.0f, 0.0f);
            g_pVertexB[iSet + 3].vTexture = tbVector2(1.0f, 1.0f);
            if(iSet)
            {
                //Positionsangaben machen

                g_pVertexG[iSet].vPosition = tbVector3(g_pVertexG[iSet - 1].vPosition.x + 6 , -1.0f, 0.0f);  
                g_pVertexG[iSet + 1].vPosition = tbVector3(g_pVertexG[iSet].vPosition.x , 1.0f, 0.0f);
                g_pVertexG[iSet + 2].vPosition = tbVector3(g_pVertexG[iSet].vPosition.x + 2, 1.0f, 0.0f);
                g_pVertexG[iSet + 3].vPosition = tbVector3(g_pVertexG[iSet].vPosition.x + 2, -1.0f, 0.0f);
                g_pVertexB[iSet].vPosition = tbVector3(g_pVertexB[iSet - 1].vPosition.x + 6 , -1.0f, 0.0f);
                g_pVertexB[iSet + 1].vPosition = tbVector3(g_pVertexB[iSet].vPosition.x , 1.0f, 0.0f);
                g_pVertexB[iSet + 2].vPosition = tbVector3(g_pVertexB[iSet].vPosition.x + 2, 1.0f, 0.0f);
                g_pVertexB[iSet + 3].vPosition = tbVector3(g_pVertexB[iSet].vPosition.x + 2, -1.0f, 0.0f);
            }
            else
            {
                g_pVertexG[iSet].vPosition = tbVector3(-15.0f, -1.0f, 0.0f);  
                g_pVertexG[iSet + 1].vPosition = tbVector3(g_pVertexG[iSet].vPosition.x , 1.0f, 0.0f);
                g_pVertexG[iSet + 2].vPosition = tbVector3(g_pVertexG[iSet].vPosition.x + 2, 1.0f, 0.0f);
                g_pVertexG[iSet + 3].vPosition = tbVector3(g_pVertexG[iSet].vPosition.x + 2, -1.0f, 0.0f);
                g_pVertexB[iSet].vPosition = tbVector3(-12.0f, -1.0f, 0.0f);
                g_pVertexB[iSet + 1].vPosition = tbVector3(g_pVertexB[iSet].vPosition.x , 1.0f, 0.0f);
                g_pVertexB[iSet + 2].vPosition = tbVector3(g_pVertexB[iSet].vPosition.x + 2, 1.0f, 0.0f);
                g_pVertexB[iSet + 3].vPosition = tbVector3(g_pVertexB[iSet].vPosition.x + 2, -1.0f, 0.0f);
            }
        }
    }

Die MessageBox wird beim Ausführen des Programms, so oft aufgerufen, bis die Schleife beendet wurde. Danach habe ich zur Fehlersuche noch eine MessageBox platziert, die nie ausgeführt wird(dann kommt die Fehlermeldung).

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

12.12.2005, 17:48

Es gibt so ein kleines Teil das nennt sich Debugger. Wenn du nicht weißt wie der funktioniert, dann setzan die Stelle wo du glaubst, dass der Fehler auftaucht deinen Cursor und drück dann F9. Wenn du nun das Programm startest per F5 o.ä. und es bei diesem "Haltepunkt" vorbeikommt, hält das Programm an und zeigt alle aktuellen lokalen Werte der Variabelen an. Wenn du in kleinen Schritten weiter gehen willst musst du F10 drücken. Wenn du in die Funktionen reinspringen willst musst du F11 drücken. Mit dem wissen solltest du in der Lage sein den Fehler besser eingrenzen zu können.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

13.12.2005, 09:57

Ich weiss zwar nicht, ob das der Fehler ist, aber ändere doch mal Deine if-Bedingung in die folgende um:

C-/C++-Quelltext

1
if (iSet % 4 == 0)


Warum setzt Du die Farbe zweimal?

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

4

13.12.2005, 18:49

Das mit der Farbe ist ein kleiner Fehler, der nichts mit dem Problem zu tun hat. Eigentlich sollte in der 2. Anweisung die Farbe der Textur g_pTextureB gesetzt werden.

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

5

13.12.2005, 19:37

ich meine natürlich g_pVertexB, sorry

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

13.12.2005, 20:36

Hast Du's mit der if-Anweisung probiert...?
Bzw., warum addierst Du 1, bevor Du mod 4 rechnest?

Anonymous

unregistriert

7

16.12.2005, 13:38

Habe den Fehler gefunden. Die zweite if-Bedingung ist immer wahr, d.h. die else-Anweisung wird nie ausgeführt. Da darauf der Rest aufbaut, gab es einen Riesenfehler. Funktioniert jetzt. Tatsächlich ist (i + 1) deswegen der Fehler. Danke für den Tip. :)

Werbeanzeige