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

19.02.2010, 11:07

Spiel stürzt auf anderen Computern ab

Hallo, mein aktuelles Projekt programmiere ich auf meinem "Hauptrechner". Da läuft alles wunderbar. Auf meinem Laptop, dem Laptop meiner Freundin und dem Desktop Computer eines Freundes stürzt das Spiel aber ab.

Log Datei der Tribase Engine:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
INFO: TriBase-Engine wird initialisiert...   (TriBase.cpp, Zeile 86, Funktion tbInit)
INFO: Initialisierung komplett! (TriBase.cpp, Zeile 104, Funktion tbInit)
INFO: Der Konfigurationsdialog wird aufgerufen...   (tbConfig.cpp, Zeile 1050, Funktion tbDoConfigDialog)
INFO: Die Direct3D-Komponente wird initialisiert... (tbDirect3D.cpp, Zeile 162, Funktion tbDirect3D::Init)
INFO: Erstellen des Fensters... (tbDirect3D.cpp, Zeile 169, Funktion tbDirect3D::Init)
INFO: Initialisierung von Direct3D...   (tbDirect3D.cpp, Zeile 209, Funktion tbDirect3D::Init)
INFO: Die Initialisierung der Direct3D-Komponente ist abgeschlossen!    (tbDirect3D.cpp, Zeile 274, Funktion tbDirect3D::Init)
INFO: Texturmanager wurde initialisiert!    (tbTextureManager.cpp, Zeile 43, Funktion tbTextureManager::Init)
INFO: Die DirectInput-Komponente wird initialisiert...  (tbDirectInput.cpp, Zeile 702, Funktion tbDirectInput::Init)
INFO: DirectInput-Schnittstelle wird generiert...   (tbDirectInput.cpp, Zeile 720, Funktion tbDirectInput::Init)
INFO: Initialisierung der Maus komplett!    (tbDirectInput.cpp, Zeile 662, Funktion EnumDevicesCallback)
INFO: Initialisierung der Tastatur 


Bei der Initialisierung der Tastatur funktioniert also irgendwas nicht. Betriebssysteme sind XP und Vista.

Weiß jemand woran das liegt?

2

19.02.2010, 11:13

Gibt es denn eine Fehlermeldung von Windows? Kannst du dein Spiel nichtmal auf dem Notebook deiner Freundin Debuggen?

Ich denke aber vielmehr, dass du entweder die dll vergessen hast, oder das die C++ Redistribution nicht installiert ist. (nur Vermutungen)

3

19.02.2010, 11:19

Windows Meldung ***.exe funktioniert nicht mehr.
Tribase dll ist natürlich drin. C++ Redistribution ist auch installiert.

4

19.02.2010, 11:59

Unterscheiden sich denn die Betriebssysteme? Windows 7 / Windows XP / 32 bit / 64 bit

Gegebenfals, solltest du bei der Initialisierung der Tastatur einen Exceptionhandler einbauen, der dir die Fehlermeldung auswirft.

5

19.02.2010, 21:46

Windows Vista und Windows XP, aber beides 32 Bit Systeme. Debuggen geht leider nicht, selbst auf meinem Hauptrechner auf dem ich das Spiel programmiere bin ich nicht in der Lage den debugger zu starten :oops: Die TriBase Engine sagt mir immer, dass die Engine nicht initialisiert werden konnte... Ich hab bisher nicht rausgefunden woran das liegt.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

19.02.2010, 21:49

Dann weiß ich was auf deiner ToDo gaaaaaaaanz oben steht:
Debugger zum Laufen bringen!

Wo ist denn da das Problem?
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.

7

19.02.2010, 22:01

Nachdem ich im Konfigurationsmanager Ok klicke kommt "Error while initiating the game"

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
// Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCommandLine,
                   int iShowCommand)
{
//Spiel initialisieren

    g_pDXTest = new CDXTest;
    tbResult r = g_pDXTest->Init();
    if(r == TB_CANCELED)
    {
        //Konfigurationsdialog abgebrochen. Programm leise verlassen

        TB_SAFE_DELETE(g_pDXTest);
        return 0;
        }
    else if(r)
    {
        g_pDXTest->Exit();
        TB_SAFE_DELETE(g_pDXTest);
        MessageBox(NULL,"Error while initiating the game","Error",MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }
//[...]

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

8

19.02.2010, 22:07

Bei mir war es auch so, dass Breakanoid unter Windows XP perfekt funktioniert hat und unter Windows Vista und Windows 7 bei vielen Gelegenheiten abgestürzt ist und ich kann dir sagen, dass es unmöglich ist, die Fehlerquelle ohne Debugger herauszufinden. Evtl. kannst du hinter jede Anweisung eine MessageBox einbauen, die dir eine fortlaufende Zahlenkette ausgeben. So weißt du auch, wo der Fehler liegt, nämlich hinter der letzten ausfgegebenen Zahl.

mfg

9

19.02.2010, 22:43

Zitat

g_pDXTest->Init();


Es ist doch offensichtlich, dass dort was nicht funktioniert. Du solltest dir die Funktion genauer anschauen. Mehr fehlercode/exceptionhandling einbauen etc.

btw. bist du sicher, das das hier stimmt? weil laut returnwert war der Test ja erfolgreich. Warum sollte man dann eine Fehlermeldung ausführen? Returnwerte falsch?

Zitat

MessageBox(NULL,"Error while initiating the game","Error",MB_OK | MB_ICONEXCLAMATION);
return 1;

10

20.02.2010, 09:48

Naja, das ist so aus den Beispiel-Spielen der TriBase engine übernommen. Und es funktioniert ja wenn ich das Spiel einfach nur starten möchte. Der Fehler tritt nur auf wenn ich debuggen will. Außerdem, ein return 1 wenn ein Fehler auftritt ist doch in Ordnung.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
else if(r)
    {
        g_pDXTest->Exit();
        TB_SAFE_DELETE(g_pDXTest);
        MessageBox(NULL,"Error while initiating the game","Error",MB_OK | MB_ICONEXCLAMATION);
        char errbuf_[200];
        sprintf(errbuf_,"%d",r);
        MessageBox(NULL,errbuf_,"Error",MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }


Der Fehler ist 1 (r ist 1).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
enum tbResult
{
    TB_OK           = 0,    // Erfolg

    TB_ERROR        = 1,    // Allgemeiner Fehler

    TB_CANCELED     = 2,    // Aktion abgebrochen

    TB_NOT_FOUND    = 3,    // Nicht gefunden

    TB_STOP         = 4,    // Stopp (Vorgang abbrechen)

};


Der Fehler muss ja hier passieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tbResult CDXTest::Init()
{
    tbResult r;

    //Alles zurücksetzen

    ZeroMemory(this,sizeof(CDXTest));

    //TriBase Engine initialisieren und Konfigurationsdialog aufrufen

    if(tbInit()) 
    {
        MessageBox(NULL,"Fehler in Init()","Error",MB_OK | MB_ICONEXCLAMATION);
        return TB_ERROR;
    }
 r = tbDoConfigDialog(&m_Config);
//[...]


Ich rede momentan nur von dem Debug Problem. Das ursprüngliche Problem lässt sich dann ja hoffentlich beseitigen wenn der Debugger läuft.

Werbeanzeige