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

11

11.09.2004, 11:07

ja mir hat sich ein neues problem aufgedrängt...und zwar sollen 2 extras ein laser pad und ein rocket pad sein das laser und raketen verhscießen kann die als model gerendert werden. allerdings sobald man so ein extra einsammelt und der ball danach einen block berührt kackt das game ab und der debugger findet auch nix. hier der code:

Game.h:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class CGame
{
public:
    tbModel*                m_pLevelModel;      
    tbModel*                m_pPaddleModel;     
    tbModel*                m_pBallModel;       
    tbModel*                m_apBlockModel[4];
    tbModel*                m_apExtraModel[19];
    tbModel*                m_apProjectileModel[2];
    
    CBall*                  m_pBall;
    BOOL                    m_bPaused;          
    BOOL                    m_bGameOver;
    BOOL                    m_bJackpot;
    BOOL                    m_bExtraLife;
    int                     m_iLevel;               
    int                     m_iTriesLeft;       
    int                     m_iScore;
    int                     m_iMulti;
    char                    m_cExtraText[20];
    tbVector3               m_vPaddlePos;
    tbVector3               m_vPaddleVel;
    tbVector3               m_vBallVel;
    tbVector3               m_vBallPos;
    float                   m_fLevelTime;
    float                   m_fExtraTime;

    CBall                   m_aBall[16];        
    CBlock                  m_aBlock[64];
    CExtra                  m_aExtra[19];
    CProjectile             m_aProjectile[2];

    inline CGame()          {ZeroMemory(this, sizeof(CGame));}
    inline MultiCreate()    {m_iMulti = tbIntRandom(2, 5);}

    tbResult    Init();                                                             
    tbResult    Exit();                                                             
    tbResult    Load();                                                             
    tbResult    Unload();                                                           
    tbResult    Move(float fTime);                                                      
    tbResult    Render(float fTime);                                                
    tbResult    InitLevel(int iLevel);                                              
    int         CreateBall(tbVector3 vPosition, tbVector3 vVelocity, BOOL bGrabbed);    
    tbResult    CreateBlockRow(char* pcBlocks, tbVector3 vStartPos);
    void        CreateExtra(tbVector3 vPosition, tbVector3 vVelocity);
    void        CreateProjectile(tbVector3 vPosition, tbVector3 vVelocity, DWORD dwProjectileType);
};


Game.cpp

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
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
// __________________________________________________________________
// Lädt den Spielzustand
tbResult CGame::Load()
{
    char acFilename[256];

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

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

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

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

    for(DWORD e = 0; e < 19; e++)
    {
        sprintf(acFilename, "Data\\Extra%d.tbm", e + 1);
        m_apExtraModel[e] = new tbModel;
        if(m_apExtraModel[e]->Init(acFilename, "Data\\")) TB_ERROR("Fehler beim Laden eines Extramodells!", TB_ERROR);
    }

    m_apProjectileModel[0] = new tbModel;
    if(m_apProjectileModel[0]->Init("Data\\Projektil1.tbm", "Data\\")) TB_ERROR("Fehler beim Laden eines Projektilmodells!", TB_ERROR);

    m_apProjectileModel[1] = new tbModel;
    if(m_apProjectileModel[1]->Init("Data\\Projektil2.tbm", "Data\\")) TB_ERROR("Fehler beim Laden eines Projektilmodells!", TB_ERROR);
    
    return TB_OK;
}

// __________________________________________________________________
// Entlädt den Spielzustand
tbResult CGame::Unload()
{
    TB_SAFE_DELETE(m_pLevelModel);
    TB_SAFE_DELETE(m_pPaddleModel);
    TB_SAFE_DELETE(m_pBallModel);
    for(DWORD b = 0; b < 4; b++) TB_SAFE_DELETE(m_apBlockModel[b]);
    for(DWORD e = 0; e < 19; e++) TB_SAFE_DELETE(m_apExtraModel[e]);
    TB_SAFE_DELETE(m_apProjectileModel[0]);
    TB_SAFE_DELETE(m_apProjectileModel[1]);

    return TB_OK;
}

// __________________________________________________________________
// Bewegt den Spielzustand
tbResult CGame::Move(float fTime)
{ .............

    if((m_aExtra[17].m_bActive == TRUE) && (m_fExtraTime >= 0.0f))
    {
        sprintf(m_cExtraText, "Laser Pad");
        m_fExtraTime -= fTime;

        for(int iExtra = 0; iExtra < 19; iExtra++)
        {
            if(iExtra != 17)
            {
                m_aExtra[iExtra].m_bActive = FALSE;
            }
        }
    }
    else if((m_aExtra[17].m_bActive == TRUE) && (m_fExtraTime < 0.0f))
    {
        sprintf(m_cExtraText, "");
        m_aExtra[17].m_bActive = FALSE;
    }

    if((m_aExtra[17].m_bActive == TRUE) && (g_pbButtons[TB_KEY_SPACE]) && (!m_aProjectile[0].m_bExists))
    {
        CreateProjectile(m_vPaddlePos + 0.25f, tbVector3(0.0, 0.0f, 10.0f), 0);
    }

    if((m_aExtra[18].m_bActive == TRUE) && (m_fExtraTime >= 0.0f))
    {
        sprintf(m_cExtraText, "Rocket Pad");
        m_fExtraTime -= fTime;

        for(int iExtra = 0; iExtra < 19; iExtra++)
        {
            if(iExtra != 18)
            {
                m_aExtra[iExtra].m_bActive = FALSE;
            }
        }
    }
    else if((m_aExtra[18].m_bActive == TRUE) && (m_fExtraTime < 0.0f))
    {
        sprintf(m_cExtraText, "");
        m_aExtra[18].m_bActive = FALSE;
    }

    if((m_aExtra[18].m_bActive == TRUE) && (g_pbButtons[TB_KEY_SPACE]) && (!m_aProjectile[0].m_bExists))
    {
        CreateProjectile(m_vPaddlePos + 0.25f, tbVector3(0.0, 0.0f, 10.0f), 1);
    }
..........................

if(m_aProjectile[0].m_bExists)  m_aProjectile[0].Move(fTime);
    if(m_aProjectile[1].m_bExists)  m_aProjectile[1].Move(fTime);

..........................

// __________________________________________________________________
// Rendert den Spielzustand
tbResult CGame::Render(float fTime)
{

..........................

if(m_aProjectile[0].m_bExists) m_aProjectile[0].Render(fTime, 0);
    if(m_aProjectile[1].m_bExists) m_aProjectile[1].Render(fTime, 1);


// __________________________________________________________________
// Initialisiert einen Level
tbResult CGame::InitLevel(int iLevel)
{
    DWORD dwBall;
    
    g_pImpact->m_apSound[2]->PlayAvailableBuffer();

    m_iLevel = iLevel;
    m_bPaused = FALSE;
    m_bGameOver = FALSE;
    m_fLevelTime = 0.0f;
    m_vPaddlePos = tbVector3(0.0f, 0.0f, -8.5f);
    m_vPaddleVel = tbVector3(0.0f);

    ZeroMemory(m_aBall, sizeof(CBall));
    ZeroMemory(m_aBlock, 64 * sizeof(CBlock));
    ZeroMemory(m_aExtra, 19 * sizeof(CExtra));
    ZeroMemory(m_aProjectile, 2 * sizeof(CProjectile));

.......................

// __________________________________________________________________
// Erstellt ein Projektil
void CGame::CreateProjectile(tbVector3 vPosition,
                             tbVector3 vVelocity,
                             DWORD dwProjectileType)
                      
{
    m_aProjectile[dwProjectileType].m_bExists = TRUE;
    m_aProjectile[dwProjectileType].m_pGame = this;
    m_aProjectile[dwProjectileType].m_vPosition = vPosition;
    m_aProjectile[dwProjectileType].m_vVelocity = vVelocity;
}


Projectile.h:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// __________________________________________________________________
// Verwendete Symbole vordeklarieren
class CGame;

// __________________________________________________________________
// Klasse für ein Projektil
class CProjectile
{
public:
    BOOL         m_bExists;
    CGame*       m_pGame;
    tbVector3    m_vPosition;
    tbVector3    m_vVelocity;

    inline CProjectile()             {ZeroMemory(this, sizeof(CProjectile));}
    
    tbResult    Move(float fTime);
    tbResult    Render(float fTime, DWORD dwProjectileModel);
    tbVector3   GetPos()   {return m_vPosition;}
};


und projectile.cpp

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
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
#include "Impact.h"

// __________________________________________________________________
// Bewegt ein Projektil
tbResult CProjectile::Move(float fTime)
{
    tbVector3   vBlock;
    int         iSound;
    int         iBuffer;

    for(DWORD dwBlock = 0; dwBlock < 64; dwBlock++)
    {
        if(m_pGame->m_aBlock[dwBlock].m_iEnergy > 0)
        {
            vBlock = m_pGame->m_aBlock[dwBlock].m_vPosition;
            
            if(m_vPosition.x  >= vBlock.x - 1.0f &&
               m_vPosition.x  <= vBlock.x + 1.0f &&
               m_vPosition.z  >= vBlock.z - 0.5f &&
               m_vPosition.z  <= vBlock.z + 0.5f)
            {
                if(m_pGame->m_aProjectile[0].m_bExists)
                {
                    iSound = tbIntRandom(8, 11);
                    iBuffer = g_pImpact->m_apSound[iSound]->PlayAvailableBuffer();
                    
                    if(iBuffer != -1)
                    {
                        g_pImpact->m_apSound[iSound]->SetFrequency(iBuffer, 44100 + tbIntRandom(-5000, 5000));
                    }
                
                    m_pGame->m_iScore += 100;
                    m_pGame->m_aBlock[dwBlock].m_iEnergy--;
                    m_bExists = FALSE;
                }
            
                if(m_pGame->m_aProjectile[1].m_bExists)  m_pGame->m_aBlock[dwBlock].m_iEnergy = 0;
            
                if(m_pGame->m_aBlock[dwBlock].m_iEnergy <= 0)
                {
                    m_pGame->m_iScore += m_pGame->m_aBlock[dwBlock].m_iType * 1000;
                }
            }
                    
            break;
        }
    }

    m_vPosition += m_vVelocity * fTime;
    
        if(m_vPosition.z < 4.25f)
    {
        m_bExists = FALSE;
    }

    return TB_OK;
}

// _________________________________________________________________
// Rendert ein Projektil
tbResult CProjectile::Render(float fTime, DWORD dwProjectileModel)
{
    tbMatrix mWorld;

    mWorld = tbMatrixTranslation(GetPos());
    tbDirect3D::SetTransform(D3DTS_WORLD, mWorld);

    m_pGame->m_apProjectileModel[dwProjectileModel]->Render();
    
    return TB_OK;
}

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

11.09.2004, 13:48

sry, ich bin immo verhindert da ich am bwinf arbeite.....

13

12.09.2004, 14:26

jo du hast mir ja auch schon genug geholfen...aber ich dachte das sind für euch nur peanuts ^^

Anonymous

unregistriert

14

17.09.2004, 12:18

he ich würde das spiel gerne als abi-präsentation vorstellen...kann mir keiner helfen?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

15

17.09.2004, 15:23

Tjo, denn schick es mir eben wieder als zip-datei, denn so finde ich den Fehler auch nicht direkt.

16

17.09.2004, 18:19

immer du...ich hab schon nen schlechtes gewissen ^^

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

17

26.09.2004, 19:39

sry das es so lange dauert, aber bei mir fliegt er schon bei dem else if(r) in der WInmain raus....

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

18

26.09.2004, 20:16

Also jetzt muss ich dich hauen, denn er sagt mir das ich die extramodelldatei nit habe.(wie auch log:FEHLER: Die Datei Data\Extra17.tbm konnte nicht geöffnet, gelesen, erstellt oder beschrieben werden! (tbfile.cpp, Zeile 475, Funktion (Unbekannt)) )

Werbeanzeige