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

20.12.2008, 09:12

Fehler bei Debuging in tbFont::Init()

Hallo

ich arbeite gerade an einem kleinen Snake spiel und wollte es debugen...

Da bin ich auf einen sehr seltsamen fehler gestoßen: Immer wenn ich debuge dann liefert mir die Funktion tbFont::Init() einen fehler zurück. Wenn ich den selben build ohne debuging starte giebt es das problem nicht und die schrift funktioniert einwandfrei.

Ich benutze Visual Studio 2008 Professional

hier der relevante inhalt der log datei:

Quellcode

1
2
3
4
FEHLER: Die Datei Data\Font1.tga konnte nicht geöffnet, gelesen, erstellt oder beschrieben werden! (tbfile.cpp, Zeile 465, Funktion tbReadRawFile)
FEHLER: Die Datei Data\Font1.tga konnte nicht geöffnet, gelesen, erstellt oder beschrieben werden! (tbvfile.cpp, Zeile 41, Funktion tbVFile::Init)
FEHLER: Fehler beim Erstellen der virtuellen Datei! (tbfont.cpp, Zeile 128, Funktion tbFont::Init)
FEHLER: Fehler beim laden der Schriftart Data\Font1! (snake.cpp, Zeile 176, Funktion CSnake::Load)



hier die Code stelle im programm:

C-/C++-Quelltext

1
2
3
4
5
6
7
    // Die Schriftarten laden

    m_pFont1 = new tbFont;
    if(m_pFont1->Init("Data\\Font1.tga", "Data\\Font1.tbf"))
    {
        // Fehler

        TB_ERROR("Fehler beim laden der Schriftart Data\\Font1!", TB_ERROR);
    }



ich hoffe ihr könnt mir helfen.

Anonymous

unregistriert

2

20.12.2008, 09:47

Wäre vielleicht ganz hilfreich wenn du uns deine Init und Loadmethode zeigen könntest.

3

20.12.2008, 10:08

die Init Methode von tbFont ist in der TriBase:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Laden aus echten Dateien

tbResult tbFont::Init(char* pcTGAFile,
                      char* pcTBFFile)
{
    tbVFile* pTGAFile;
    tbVFile* pTBFFile;


    // Parameter prüfen

    if(!pcTGAFile) TB_ERROR_NULL_POINTER("pcTGAFile", TB_ERROR);
    if(!pcTBFFile) TB_ERROR_NULL_POINTER("pcTBFFile", TB_ERROR);


    // Virtuelle Dateien erstellen

    pTGAFile = new tbVFile; if(!pTGAFile) TB_ERROR_OUT_OF_MEMORY(TB_ERROR);
    pTBFFile = new tbVFile; if(!pTBFFile) TB_ERROR_OUT_OF_MEMORY(TB_ERROR);

    // Aus Datei laden

    if(pTGAFile->Init(pcTGAFile)) TB_ERROR("Fehler beim Erstellen der virtuellen Datei!", TB_ERROR);
    if(pTBFFile->Init(pcTBFFile)) TB_ERROR("Fehler beim Erstellen der virtuellen Datei!", TB_ERROR);

    // Die andere Methode aufrufen

    if(Init(pTGAFile, pTBFFile))
    {
        // Fehler!

        TB_ERROR("Fehler beim Laden der Schriftart!", TB_ERROR);
    }

    // Die virtuellen Dateien wieder freigeben

    TB_SAFE_DELETE(pTGAFile);
    TB_SAFE_DELETE(pTBFFile);

    return TB_OK;
}



// Initialisierung aus virtuellen Dateien

tbResult tbFont::Init(tbVFile* pTGAFile,
                      tbVFile* pTBFFile)
{
    HRESULT hResult;

    // Die Klasseninstanz zurücksetzen.

    // Damit wird ermöglicht, dass der Init-Aufruf mehrere Male mit

    // derselben Instanz funktioniert.

    Exit();

    // Parameter prüfen und sicherstellen, dass tbDirect3D initialisiert wurde

    if(!pTGAFile)                       TB_ERROR_NULL_POINTER("pTGAFile", TB_ERROR);
    if(!pTBFFile)                       TB_ERROR_NULL_POINTER("pTBFFile", TB_ERROR);
    if(!tbDirect3D::IsInitialized())    TB_ERROR("Es muss zuerst eine tbDirect3D-Klasseninstanz erstellt werden!", TB_ERROR);


    // Textur laden

    if(FAILED(hResult = D3DXCreateTextureFromFileInMemoryEx(tbDirect3D::Instance().GetDevice(),
                                                            (BYTE*)(pTGAFile->GetBuffer()) + pTGAFile->GetCursor(),
                                                            pTGAFile->GetSize() - pTGAFile->GetCursor(),
                                                            D3DX_DEFAULT, D3DX_DEFAULT, 1, 0,
                                                            D3DFMT_UNKNOWN, D3DPOOL_MANAGED,
                                                            D3DX_DEFAULT, D3DX_DEFAULT,
                                                            0, NULL, NULL, &m_pTexture)))
    {
        // Fehler!

        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileInMemoryEx", hResult, TB_ERROR);
    }

    // Informationen laden

    if(pTBFFile->Read(sizeof(tbFontInfo), &m_FontInfo))
    {
        // Fehler!

        TB_ERROR("Fehler beim Lesen der Schriftinformationen!", TB_ERROR);
    }

    // Effekt aus String erstellen

    m_pEffect = new tbEffect;
    if(!m_pEffect) TB_ERROR_OUT_OF_MEMORY(TB_ERROR);
    if(m_pEffect->Init("TEXTURE Texture;\n"
                       "\n"
                       "TECHNIQUE T1\n"
                       "{\n"
                       "    PASS P1\n"
                       "    {\n"
                       "        Texture[0]          = <Texture>;\n"
                       "        ZEnable             = False;\n"
                       "        ZWriteEnable        = False;\n"
                       "        ColorOp[0]          = Modulate;\n"
                       "        ColorArg1[0]        = Texture;\n"
                       "        ColorArg2[0]        = Current;\n"
                       "        ColorOp[1]          = Disable;\n"
                       "        AlphaOp[0]          = Modulate;\n"
                       "        AlphaArg1[0]        = Texture;\n"
                       "        AlphaArg2[0]        = Current;\n"
                       "        AlphaOp[1]          = Disable;\n"
                       "        AlphaBlendEnable    = True;\n"
                       "        SrcBlend            = SrcAlpha;\n"
                       "        DestBlend           = InvSrcAlpha;\n"
                       "    }\n"
                       "}\n", -1))
    {
        // Fehler!

        TB_ERROR("Fehler beim Erstellen des Effekts!", TB_ERROR);
    }

    // Textur setzen

    m_pEffect->GetEffect()->SetTexture("Texture", m_pTexture);

    return TB_OK;
}

4

20.12.2008, 10:47

Ich schätze mal, dass sich der Ordner Data im Projektordner befindet.
Und im Ordner Debug nicht.
fka tm

5

20.12.2008, 10:56

der ordner data war im debug ordner...
dummerweise scheint visual studio die exe allerdings im projektordner zu starten, denn als ich den ordner data da rein kopiert habe hats funktioniert.

thx für die hilfe.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

Werbeanzeige