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

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

1

09.08.2008, 14:08

Lösung: Problem mit tbFont und dem Erstellen von Effekten

Immer wieder haben manche Leute das Problem, dass Galactica, Breaknoid oder Beispielprogramme direkt nach dem Start abstürzen.
Im Log steht dann meist ein Fehler mit tbFont und dem Erstellen von Effekten.

a la

Zitat


FEHLER: Der Aufruf von D3DXCreateEffect verursachte den DirectX-Fehler E_FAIL! Beschreibung: An undetermined error occurred (tbeffect.cpp, Zeile 63, Funktion tbEffect::Init)
FEHLER: Fehler beim Erstellen des Effekts! (tbfont.cpp, Zeile 100, Funktion tbFont::Init)
FEHLER: Fehler beim Laden der Schriftart!


Was ist nur der Fehler?
Die Effekte!
In Effekt-Datein dürfen seit einiger Zeit die Variablennamen nicht so benannt werden wie Variablentypen.
Zum Beispiel geht "TEXTURE Texture" nicht mehr. (wie in c++)

Ich habe die TriBase-Engine folgendermaßen angepasst:

Quellcode

1
2
3
4
5
tbFont.cpp   Zeile 76  TEXTURE Texture; -> TEXTURE Tex0;
                   82  <Texture>        -> <Tex0>
                   104 "Texture"        -> "Tex0"
                   230 "Texture"        -> "Tex0"
tbSkyBox.cpp Zeile 148 "Texture"        -> "Tex0"

Einfach Stelle suchen und umbenennen.
Außerdem müssen noch (fast) alle Effektdateien (.fx) angepasse werden.
Einfach aus "Texture" "Tex0" machen.
ABER!!!
1. Wenn da steht "TEXTURE Texture", dann muss "TEXTURE Tex0" daraus gemacht werden.
2. Wenn "<Texture>" (in <eckigen Klammern>) da steht, dann muss "<Tex0>" daraus gemacht werden
3. Wenn 1. UND 2. nicht zutreffen, muss "Texture" so bleiben wie es ist, denn da wird nicht Die gewählte Textur "Tex0" verwendet, sondern gesagt dass die Quelle eine Textur ist. Also so lassen.

Beispiel: "GUI.fx" aus "...\Galactica\Data\" sollte danach so aussehen:

Quellcode

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
TEXTURE Tex0; //1. Regel

TECHNIQUE T1
{
    PASS P1
    {
        Texture[0]      = <Tex0>; //2. Regek
        ZEnable         = False;
        ZWriteEnable        = False;

        ColorOp[0]      = Modulate;
        ColorArg1[0]        = Texture; //3. Regel
        ColorArg2[0]        = Current;
        AlphaOp[0]      = Modulate;
        AlphaArg1[0]        = Texture; //3. Regel
        AlphaArg2[0]        = Current;
        ColorOp[1]      = Disable;

        AlphaBlendEnable    = True;
        SrcBlend        = SrcAlpha;
        DestBlend       = InvSrcAlpha;

        Lighting        = False;
        ColorVertex     = True;
        CullMode        = None;
    }
}


Wenn noch etwas fehlt, bitte bescheid sagen.

blub

Frischling

  • Private Nachricht senden

2

10.08.2008, 19:12

Ich habe in allen Effektdateien sowie in tbFont.cpp und tbSkyBox.cpp alle Vorkommen von "Texture" durch "Tex0" ersetzt und es kommt immernoch der gleiche Fehler. Vielleicht habe ich auch zuviel ersetzt. Habe zum Beispiel auch noch an anderen Stellen als die von dir genannten Ersetzungen vorgenommen:

" Texure[0] = <Texture>;\n" (also auch Texture[0] in Tex[0] umbenannt) Zeile 82 int tbFont.cpp
" ColorArg1[0] = Texture;\n" Zeile 86 int tbFont.cpp
" AlphaArg1[0] = Texture;\n" Zeile 90 int tbFont.cpp

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

3

11.08.2008, 17:50

Sorry! Das war mein Fehler!
Mit Texure[0], ColorArg1[0], etc. gibst du nicht genau diese Textur an, sondern dass eine Textur eingesetzt verwendet wird.
Also das WIE, nicht das WAS GENAU
Texure[0] ist der Textur-Stage mit dem Index 0, also nicht deine Variable. Die Variable erkennt man an den eckigen Klammern. (Außer bei der Deklarierung, da gibts Keine)

Hier ist mal der Effekt aus tbFont:

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
                  "TEXTURE Tex0;\n" //Hier wird die Textur-Variable "Tex0" angelegt

                    "\n"
                    "TECHNIQUE T1\n"
                    "{\n"
                       "    PASS P1\n"
                       "    {\n"
                       "        Texture[0]          = <Tex0>;\n" //Hier wird die Textur-Variable "Tex0" eingesetzt, (Dass es eine Variable ist, erkennt man an den eckigen Klammern)

                       "          ZEnable               = False;\n"
                       "          ZWriteEnable      = False;\n"
                       "          ColorOp[0]            = Modulate;\n"
                       "          ColorArg1[0]      = Texture;\n" //hier wird angegeben, dass die Quelle eine Textur ist (es wird keine Variable eingesetzt, denn es gibt keine eckigen Klammern)

                       "          ColorArg2[0]      = Current;\n"
                       "          ColorOp[1]            = Disable;\n"
                       "          AlphaOp[0]            = Modulate;\n"
                       "          AlphaArg1[0]      = Texture;\n" //hier wird angegeben, dass die Quelle eine Textur ist (es wird keine Variable eingesetzt, denn es gibt keine eckigen Klammern)


                       "          AlphaArg2[0]      = Current;\n"
                       "          AlphaOp[1]            = Disable;\n"
                       "          AlphaBlendEnable  = True;\n"
                       "          SrcBlend          = SrcAlpha;\n"
                       "          DestBlend         = InvSrcAlpha;\n"
                       "    }\n"
                       "}\n"

blub

Frischling

  • Private Nachricht senden

4

11.08.2008, 21:37

Habe nun alles so geändert wie von dir beschrieben. Nun kommt aber ein anderer Fehler. Im Log ist nicht zu erkkennen, ob er davor oder danach auftritt, denn er tritt wie der "Texture"-Fehler direkt nach dem Initialisieren der DirectSound-Komponente auf. Allerdings ist es kein Absturz mit Windows-Fehlersuche, sondern der Hintergund des Spielfensters wird schwarz(bei dem "Texture"-Fehler blieb er transparent) und es kommt eine Meldung:

"Fehler beim Initialisieren des Spiels!"

Log:

Quellcode

1
2
3
4
5
6
7
...
INFO: Die DirectSound-Komponente wurde erfolgreich initialisiert!    (tbDirectSound.cpp, Zeile 111, Funktion tbDirectSound::Init)
FEHLER: Der Aufruf von m_pGraph->RenderFile verursachte den DirectX-Fehler DIERR_INSUFFICIENTPRIVS & VFW_E_INVALIDMEDIATYPE! Beschreibung: Unable to IDirectInputJoyConfig_Acquire because the user does not have sufficient privileges to change the joystick configuration. & An invalid media type was specified (tbMusic.cpp, Zeile 63, Funktion tbMusic::Init)
FEHLER: Fehler beim Laden der Briefing-Musik!   (Galactica.cpp, Zeile 189, Funktion CGalactica::Load)
FEHLER: Fehler beim Laden des Spiels!   (Galactica.cpp, Zeile 90, Funktion CGalactica::Init)
INFO: Die Direct3D-Komponente wurde heruntergefahren.
...


Einen Joystick habe ich gar nicht angeschlossen. Auch die Gamecontroller-Liste in der Systemsteuerung ist leer.

Wenn ich die entsprechende Zeile im Code wo der Fehler geworfen wird auskommentiere startet das Spiel. Allerdings ist der Menühintergund (nach dem Startbildschirm) grün, die weiße Schrift ist verwaschen und auf den ebenfalls weißen Blöcken (für Schiffstypen und die Teams) schlecht zu erkennen. Habe dazu verschiedene Auflösungen und Vollbild/Fenstermodus durchprobiert.

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

5

14.08.2008, 13:58

Tritt dieses Problem nur bei Galactica auf?
Was macht Beispiel 3.3? (Die tbFont-Demo)?

Die Fehlerbeschreibung sieht so aus, als ob die Breifing-Musik nicht gelesen werden kann. Hör dir die mal mit dem Mediaplayer an. ("Data\\Briefing.mp3")
Zur Not nochmal von der CD kopieren, vieleicht ist die mp3 beschädigt?
Kann auch sein, dass dein CODEC mit diesem Format nicht klarkommt. Kannst ja mal einen anderen Typ (zb wav) probieren.

Das mit dem Joystick ist eigenartig. Da fehlen irgendwelche Rechte.
Hast du Vista? Starte Galactica mal mit Adminrechten.

6

01.09.2008, 18:10

Ich habe alles geändert wie beschrieben, aber es kommen immer noch dieselben Fehler... :(

7

27.09.2008, 14:32

Lösung: Probleme mit Effekt- bzw. tbm Dateien

javascript:emoticon(':badgrin:')
Hatte auch das Problem, dass manche Bsp. (speziell modelle.cpp), in welchen Effekt-Dateien verwendet werden, nur mit der DirectX9 Originalversion vom Buch liefen, und wollte mich damit nicht zufrieden geben.
Auch nachdem ich unterschiedliche Namen für Variablentyp und -Name verwendet habe lief es immer nocht nicht. Habe dann mal andere fx-Dateien unter die Lupe genommen, und festgestellt das der Variablentyp "STRING" dort immer klein geschrieben wurde.
Habe dann mittels Modelkonverter das 3ds-Stadtmodell aus dem Bsp. "Modelle" neu geladen, und den Name des Variablentypes von STRING nach string geändert und eine neue tbm-Datei erstellt. Nun wurde das Stadtmodell korrekt geladen, aber das Schiffsmodell nicht.
Neues Problem, da das Schiffsmodell nicht als 3ds-Datei verfügbar.
Habe nun die tbm-Datei mittels Hexeditor geöffnet, und darin STRING nach string geändert und gespeichert > neue Zip-Datei erstellt, und nun läuft es endlich.

Werbeanzeige