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

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

1

30.04.2006, 23:09

Problem bei Spiel 1

hi,

ich habe irgendwie ein dummes Problem.
das erste spiel lässt sich zwar prime compilieren aber sobal ich dann in meine spiel auf neues spiel klicke kommt ne blöde fehlermeldung.

mit dem debuggen kenne ich mich nicht aus (vielleicht kann mir das einer erklären oder mir ein tut zeigen).

vielleicht hat eine auch ne idee woran es liegen kann, der quellcode ist genauso wie im buch beschrieben

thx

mfg und schönen abend noch

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

2

30.04.2006, 23:17

ohne dass du uns die Fehlermeldung sagst kann dir hier keiner helfen...
Ich würde die Welt gern verbessern, doch Gott gibt mir den Sourcecode nicht! :-(

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

3

30.04.2006, 23:26

oh ja habe ich vergessen

flash.exe hat nen prob festgestellt und muss beendet werden.

wenn ich dann auf schließen drücke ist kalr was kommt aber bei debug passiert genau das selbe. mehr knöpfe sind dan nicht udn ich weiß auch nicht genau was das auslöst. ich weiß nur das das menü noch ging, aber sobal ich den anfang des spielsimplentiert habe gings nicht

das ist mein bisheriger spiel code:

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

// GAME - DEFINITION DES GAMES (->FLASH<-)

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



//***************************************************************

// INTRO - INCLUDES , DEFINES

//***************************************************************


#include "Flash.h"

//***************************************************************

// GAME - LOAD()

//***************************************************************

tbResult CGame::Load()
{
    char acFilename[256];

    // Levelmodel laden

    m_pLevelModel = new  tbModel;
    if(m_pLevelModel->Init("Data\\Modelle\\Level.tbm", "Data\\Modelle\\"))
    {
        TB_ERROR("Fehler beim Laden des LevelModells!", TB_ERROR);
    }

    // Schlägermodel laden

    m_pPaddleModel = new tbModel;
    if(m_pPaddleModel->Init("Data\\Modelle\\Paddle.tbm", "Data\\Modelle\\"))
    {
        TB_ERROR("Fehler beim Laden des SchlägerModells!", TB_ERROR);
    }

    // Ballmodel laden

    m_pBallModel = new tbModel;
    if(m_pBallModel->Init("Data\\Modelle\\Ball.tbm", "Data\\Modelle\\"))
    {
        TB_ERROR("Fehler beim Laden des BallModells!", TB_ERROR);
    }

    // Laden der Block Modelle

    for(DWORD b = 0; b<4; b++)
    {
        sprintf(acFilename, "Data\\Modelle\\Block%d.tbm", b+1);
        if(m_pBlock[b]->Init(acFilename, "Data\\Modelle\\"))
        {
            TB_ERROR("Fehler beim Laden der BlockModelle!", TB_ERROR);
        }
    }

    return TB_OK;
}
//***************************************************************

// GAME - UNLOAD()

//***************************************************************

tbResult CGame::Unload()
{
    // Modelle freigeben

    TB_SAFE_DELETE(m_pBallModel);
    TB_SAFE_DELETE(m_pPaddleModel);
    TB_SAFE_DELETE(m_pLevelModel);
    for(DWORD b = 0; b < 4; b++) TB_SAFE_DELETE(m_pBlock[b]);

    return TB_OK;
}
//***************************************************************

// GAME - INIT()

//***************************************************************

tbResult CGame::Init()
{
    // Laden

    Load();

    // Werte für Versuche und Punkte setzten

    m_iTriesLeft = 5;
    m_iScore = 0;

    return TB_OK;
}
//***************************************************************

// GAME - EXIT()

//***************************************************************

tbResult CGame::Exit()
{
    // Entladen

    Unload();

    return TB_OK;
}
//***************************************************************

// GAME - RENDER()

//***************************************************************

tbResult CGame::Render(float fTime)
{
    tbMatrix mWorld;
    tbMatrix mProjection;
    tbMatrix mCamera;
    D3DLIGHT9 CamLight;
    tbVector3 vCameraPos;
    tbVector3 vCameraLookAt;

    // Puffer leeren und Scene beginnen

    tbDirect3D& D3D = tbDirect3D::Instance();
    D3D->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,tbColor(0.0f,0.0f,0.0f),1.0f,0);
    D3D->BeginScene();

    // Projektionmatrix erstellen und aktivieren

    mProjection = tbMatrixProjection(TB_DEG_TO_RAD(70.0f),
                                     D3D.GetAspect(),
                                     0.1f, 50.0f);
    D3D.SetTransform(D3DTS_PROJECTION, mProjection);
    
    // Kamera hinter dem Schläger

    vCameraPos = m_vPaddlePos + tbVector3(0.f,10.0f,-5.0f);

    // Kameramatrix erstellen und aktivieren

    mCamera = tbMatrixCamera(vCameraPos,vCameraLookAt);
    D3D.SetTransform(D3DTS_VIEW, mCamera);

    // Richtungslicht mit der Richtung der Kamera erstellen und aktivieren

    ZeroMemory(&CamLight,sizeof(D3DLIGHT9));
    CamLight.Type = D3DLIGHT_DIRECTIONAL;
    CamLight.Diffuse = tbColor(1.0f,1.0f,1.0f);
    CamLight.Specular = tbColor(1.0f,1.0f,1.0f);
    CamLight.Direction = vCameraLookAt - vCameraPos;
    D3D->SetLight(0,&CamLight);
    D3D->LightEnable(0,TRUE);

    // Schwache grüne Hintergrundbeleuchtung

    D3D.SetRS(D3DRS_AMBIENT,tbColor(0.1f,0.25f,0.1f));

    // Level Rendern

    mWorld = tbMatrixIdentity();
    D3D.SetTransform(D3DTS_WORLD, mWorld);
    m_pLevelModel->Render();

    // Schläger rendern

    mWorld = tbMatrixTranslation(m_vPaddlePos);
    D3D.SetTransform(D3DTS_WORLD,mWorld);
    m_pPaddleModel->Render();

    // Wenn pausiert, Pause anzeigen

    if(m_pPaused)
    {
        g_pFlash->m_pFont1->Begin();
        g_pFlash->m_pFont1->DrawTextA(tbVector2(0.5f,0.5f),"Pause",TB_FF_ALIGN_HCENTER | TB_FF_ALIGN_VCENTER | TB_FF_RELATIVE |TB_FF_RELATIVESCALING);
        g_pFlash->m_pFont1->End();
    }

    // Scene beenden

    D3D->EndScene();

    return TB_OK;
}
//***************************************************************

// GAME - MOVE()

//***************************************************************

tbResult CGame::Move(float fTime)
{
    // Pause 

    if(g_pbButtons[TB_KEY_PAUSE])
    {
        m_pPaused = !m_pPaused;
        tbDelay(160);
    }
    // Wenn Spiel pausiert gibt es nicht mehr zu tun

    if(m_pPaused)
    {
        return TB_OK;
    }
    
    // Auf die Pfeiltasten reagieren

    m_vPaddleVel.x += g_pfButtons[TB_KEY_RIGHT] * 50.0f * fTime;
    m_vPaddleVel.x -= g_pfButtons[TB_KEY_LEFT]  * 50.0f * fTime;

    // Den Schläger fortbewegen

    m_vPaddlePos *= m_vPaddleVel * fTime;

    // Bewegung abschwächen

    m_vPaddleVel *= powf(0.2f,fTime);

    return TB_OK;
}
//***************************************************************

//***************************************************************


und das halb der allgemaine definition code

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

// FLASH - DEFINITION ALLGEMEINER SPIELFUNKTIONEN

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



//***************************************************************

// FLASH - INCLUDES

//***************************************************************


#include "Flash.h"

//***************************************************************

// GLOBALE VARIABLEN

//***************************************************************

CFlash*     g_pFlash = NULL;
float*      g_pfButtons = NULL;
BOOL*       g_pbButtons = NULL;
//***************************************************************

// FLASH - WINMAIN()

//***************************************************************

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

    g_pFlash = new CFlash;
    r = g_pFlash->Init();
    if(r == TB_CANCELED)
    {
        TB_SAFE_DELETE(g_pFlash)

        return 0;
    }
    else if(r)
    {
        g_pFlash->Exit();
        TB_SAFE_DELETE(g_pFlash);
        // Messagebox hier


        return 1;
    }

    // Spiel laufen lassen

    if(g_pFlash->Run())
    {
        g_pFlash->Exit();
        TB_SAFE_DELETE(g_pFlash);
        // Messagebox hier


        return 1;
    }

    // Spiel verlassen

    g_pFlash->Exit();
    TB_SAFE_DELETE(g_pFlash);

    return 0;
}
//***************************************************************

// FLASH - INIT()

//***************************************************************

tbResult CFlash::Init()
{
    // Variablen 

    tbResult r;

    // Alles zurücksetzten

    ZeroMemory(this, sizeof(CFlash));

    // Die TriBase-Engine initialisieren

    if(tbInit())
    {
        return TB_ERROR;
    }
    r = tbDoConfigDialog(&m_Config);
    if(r == TB_CANCELED)
    {
        return TB_CANCELED;
    }
    else if(r)
    {
        TB_ERROR("Fehler beim Initialisieren der TriBase-Engine!", r);
    }

    // Laden

    if(Load())
    {
        TB_ERROR("Fehler beim Laden des Spiels!", TB_ERROR);
    }

    // Klassen für den Spielzustand erstellen

    m_pIntro    = new CIntro;
    m_pMainMenu = new CMainMenu;
    m_pGame     = new CGame;

    // Begin beim Intro

    SetGameState(GS_INTRO);

    return TB_OK;
}
//***************************************************************

// FLASH - EXIT()

//***************************************************************

tbResult CFlash::Exit()
{
    // Spiezustand auf GS_NONE setzen

    SetGameState(GS_NONE);

    // Entladen

    Unload();

    // Sicher beenden

    TB_SAFE_DELETE(m_pIntro);
    TB_SAFE_DELETE(m_pMainMenu);
    TB_SAFE_DELETE(m_pGame);

    // Engine herunterfahren

    tbExit();

    return TB_OK;
}
//***************************************************************

// FLASH - LOAD()

//***************************************************************

tbResult CFlash::Load()
{
    // Direct3D initialisieren

    if(tbDirect3D::Instance().Init(&m_Config, "Flash", NULL, LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(1))))
    {
        TB_ERROR("Fehler beim Initialisieren von Direct3D!", TB_ERROR);
    }

    // Texturemanager initialisieren

    if(tbTextureManager::Instance().Init())
    {
        TB_ERROR("Fehler beim Initialisieren von dem TextureManager!", TB_ERROR);
    }

    // DirectSound initialisieren

    if(tbDirectSound::Instance().Init(&m_Config , NULL , DSSCL_PRIORITY , FALSE))
    {
        TB_ERROR("Fehler beim Initialisieren von DirectSound!", TB_ERROR);
    }

    // DirectInput initialisieren

    if(tbDirectInput::Instance().Init())
    {
        TB_ERROR("DirectInput konnte nicht initialisiert werden!", TB_ERROR);
    }

    // Speicher für die analogen Knöpfe reservieren

    g_pfButtons = new float[tbDirectInput::Instance().GetNumButtons()];
    g_pbButtons = new BOOL [tbDirectInput::Instance().GetNumButtons()];

    // Schriftarten laden

    m_pFont1 = new tbFont;
    if(m_pFont1->Init("Data\\Fonts\\Font1.tga" , "Data\\Fonts\\Font1.tbf"))
    {
        TB_ERROR("Fehler beim Laden der Schriftart Data\\Fonts\\Font1!", TB_ERROR);
    }
    m_pFont2 = new tbFont;
    if(m_pFont2->Init("Data\\Fonts\\Font2.tga" , "Data\\Fonts\\Font2.tbf"))
    {
        TB_ERROR("Fehler beim Laden der Schriftart Data\\Fonts\\Font2!", TB_ERROR);
    }
    m_pExitFont = new tbFont;
    if(m_pExitFont->Init("Data\\Fonts\\Beenden - Font.tga" , "Data\\Fonts\\Beenden - Font.tbf"))
    {
        TB_ERROR("Fehler beim Laden von der Schriftart Data\\Fonts\\Beenden - Font.tbf!", TB_ERROR);
    }

    return TB_OK;
}
//***************************************************************

// FLASH - UNLOAD()

//***************************************************************

tbResult CFlash::Unload()
{
    // Schriftarten löschen

    TB_SAFE_DELETE(m_pFont1);
    TB_SAFE_DELETE(m_pFont2);
    TB_SAFE_DELETE(m_pExitFont);

    // DirectX - Klassen löschen

    TB_SAFE_DELETE(g_pfButtons);
    TB_SAFE_DELETE(g_pbButtons);
    tbDirect3D::Instance().Exit();
    tbDirectSound::Instance().Exit();
    tbTextureManager::Instance().Exit();
    tbDirectInput::Instance().Exit();

    return TB_OK;
}
//***************************************************************

// Move- und Render-Funktion(Kapselung)

//***************************************************************

tbResult Move(float fTime)
{
    return g_pFlash->Move(fTime);
}
tbResult Render(float fTime)
{
    return g_pFlash->Render(fTime);
}
//***************************************************************

// FLASH - RUN()

//***************************************************************

tbResult CFlash::Run()
{
    // Nachrichtenschleife betreten

    if(tbDoMessageLoop(::Move, ::Render))
    {
        TB_ERROR("Fehler in der Nachrichtenschleife!", TB_ERROR);
    }

    return TB_OK;
}
//***************************************************************

// FLASH - SETGAMESTATE()

//***************************************************************

tbResult CFlash::SetGameState(EGameState NewGameState)
{
    // Variablen

    tbResult r;

    // Alten Spielzustand entladen

    switch(m_GameState)
    {
    case GS_INTRO:      m_pIntro->Exit();   break;
    case GS_MAINMENU:   m_pMainMenu->Exit();break;
    case GS_GAME:       m_pGame->Exit();    break;
    }

    // Zeit zurücksetzten

    m_fTime = 0.0f;

    // Neuen Spielzustand laden

    m_GameState = NewGameState;
    switch (m_GameState)
    {
    case GS_INTRO:      r = m_pIntro->Init();   break;
    case GS_MAINMENU:   r = m_pMainMenu->Init();break;
    case GS_GAME:       r = m_pGame->Init();    break;
    }

    // Eventuelle Fehler abfangen

    /*if(r)
    {
        TB_ERROR("Fehler beim Laden des Spielzustands!", TB_ERROR);
    }*/

    return TB_OK;
}
//***************************************************************

// FLASH - MOVE()

//***************************************************************

tbResult CFlash::Move(float fTime)
{
    tbResult r = TB_OK;

    // Alle Eingabegeräte abfragen

    tbDirectInput::Instance().GetState(g_pfButtons, g_pbButtons);

    // Aktuellen Spielzustand bewegen

    switch (m_GameState)
    {
    case GS_INTRO:      r = m_pIntro->Move(fTime);   break;
    case GS_MAINMENU:   r = m_pMainMenu->Move(fTime);break;
    case GS_GAME:       r = m_pGame->Move(fTime);    break;
    }

    // Ebentuellen Fehler abfangen

    if(r)
    {
        TB_ERROR("Fehler beim Bewegen des Spielzustands!", TB_ERROR);
    }

    // Zeit addieren

    m_fTime += fTime;

    return TB_OK;
}
//***************************************************************

// FLASH - RENDER()

//***************************************************************

tbResult CFlash::Render(float fTime)
{
    tbResult r = TB_OK;

    // Aktuellen Spielzustand rendern

    switch (m_GameState)
    {
    case GS_INTRO:      r = m_pIntro->Render(fTime);    break;
    case GS_MAINMENU:   r = m_pMainMenu->Render(fTime); break;
    case GS_GAME:       r = m_pGame->Render(fTime);     break;
    }

    // Eventuelle Fehler abfangen

    if(r)
    {
        TB_ERROR("Fehler beim Render des Spielzustands!", TB_ERROR);
    }

    // Bildpuffer anzeigen

    if(tbDirect3D::Instance().GetPresentResult())
    {
        // Anzeigen fehlgeschlagen. Programm wurde minimiert. Das Spiel wird neu initialisier. 

        // Aktuellen Spielstand entladen

        switch(m_GameState)
        {
        case GS_INTRO:      m_pIntro->Unload();    break;
        case GS_MAINMENU:   m_pMainMenu->Unload(); break;
        case GS_GAME:       m_pGame->Unload();     break;
        }

        // Das ganze Spiel entladen und wieder laden

        Unload();
        Load();

        // Aktuellen Spielzustand neu laden

        switch(m_GameState)
        {
        case GS_INTRO:      m_pIntro->Load();       break;
        case GS_MAINMENU:   m_pMainMenu->Load();    break;
        case GS_GAME:       m_pGame->Load();        break;
        }
    }

    return TB_OK;
}
//***************************************************************

//***************************************************************


hoffe einer kann damit was anfangen

mfg

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

4

01.05.2006, 09:46

hat keiner ne idee.

nicht mal ein ansatz.
ich habe nämlich keine ahnung

danke

JossBoss

Treue Seele

Beiträge: 182

Wohnort: Luxemburg

  • Private Nachricht senden

5

01.05.2006, 11:22

halo ghostrider.
mach nomal neu, wie ich...
mach erst das intro, sodass das perfekt läuft,dann das menü und dann erst das spiel selbst, ist viel einfacher und übersichtlicher ;-)

cu!!
Gratis Tools+Software und Games:

www.miraculous.eu.tc

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

6

01.05.2006, 13:25

Du solltest dir echt angewöhnen, deine Fehler einzugrenzen. Ich will zumindest nicht den kompletten Source lesen nur weil du den Debugger nicht vorher verwendest.

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

7

01.05.2006, 13:59

das habe ich oben schon mal beschrieben.

ich habe keine ahnung wie der geht, das mit den roten punkten an der seiten(breakpoinst) ist mir kalr, aber ich weiß nicht was mir der dann sagen soll.

vielleicht kann mir das ja einer erklären.

dnake

mfg

Phili

unregistriert

8

01.05.2006, 14:27

Mit

Quellcode

1
Das Programm hat einen Fehler festgestellt
kann aber kein Mensch was anfangen. Ohne Debugger geht da nix(würd ich sagen).

Phili

unregistriert

9

01.05.2006, 14:29

@Ghostrider

So kompliziert ist ein Debugger nun auch wieder nicht. Klick Doch einfach mal auf "Debuggen" und probier ein bisschen rum.

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

10

01.05.2006, 14:57

hi,

wenn ich debugge will er das spiel halb starten, drückt man dann auf ok bei der tribase einstellung kommt das:

The thread 'Win32 Thread' (0x114) has exited with code 1 (0x1).
The thread 'Win32 Thread' (0xf48) has exited with code 1 (0x1).
The program '[2492] Flash.exe: Native' has exited with code 1 (0x1).

gut und shcön , aber was sagt mit das

Werbeanzeige