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

25.07.2004, 20:27

breakanoid-erweiterung

ja da ich so im laufe des postens in ein anderes forum feststellen musste dass das prob besser hier rein passt poste ich mal hier...ich bin gerade soweit dass ich extras eingebaut habe und alles funzt bis auf folgendes:

wenn ich einen magneten einbauen will der den ball immer festhält sobald er am schläger ist rendert er den ball nicht mehr sobald er den schläger berührt:

Game.cpp:
Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if((m_aExtra[11].m_bActive == TRUE) && (m_fExtraTime >= 0.0f)) 
   {    
      sprintf(m_cExtraText, "Magnet"); 
      m_fExtraTime -= fTime; 
       
      for(int iExtra = 0; iExtra < 15; iExtra++) 
      { 
         if(iExtra != 11) 
         { 
            m_aExtra[iExtra].m_bActive = FALSE; 
         } 
      } 
   } 
   else if((m_aExtra[11].m_bActive) && (m_fExtraTime < 0.0f)) 
   { 
         sprintf(m_cExtraText, ""); 
         m_aExtra[11].m_bActive = FALSE; 
   }


Code:

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
if(g_pbButtons[TB_KEY_SPACE] && 
         m_aBall[0].m_bExists && 
         m_aBall[0].m_bGrabbed && 
         m_aExtra[11].m_bActive) 
   { 
      g_pImpact->m_apSound[3]->PlayAvailableBuffer(); 
      m_aBall[0].m_vPosition = (0.0f, 0.0f, 0.25f); 
      m_aBall[0].m_vVelocity = (0.0f); 
      m_aBall[0].m_bGrabbed = FALSE; 
      m_aBall[0].m_vPosition += m_vPaddlePos; 
      m_aBall[0].m_vVelocity.x = 0.0f; 
      m_aBall[0].m_vVelocity.y = 0.0f; 
      m_aBall[0].m_vVelocity.z = 9.0f; 
      m_aBall[0].m_vVelocity += m_vPaddleVel; 
      m_aBall[0].m_vPosition.z += 0.1f; 
   } 
   else if(g_pbButtons[TB_KEY_SPACE] && 
         m_aBall[0].m_bExists && 
         m_aBall[0].m_bGrabbed && 
         !m_aExtra[11].m_bActive) 
   { 
      g_pImpact->m_apSound[3]->PlayAvailableBuffer(); 
      m_aBall[0].m_bGrabbed = FALSE; 
      m_aBall[0].m_vPosition += m_vPaddlePos; 
      m_aBall[0].m_vVelocity.x = tbFloatRandom(-4.0f, 4.0f); 
      m_aBall[0].m_vVelocity.y = 0.0f; 
      m_aBall[0].m_vVelocity.z = tbFloatRandom(8.0f, 10.0f); 
      m_aBall[0].m_vVelocity += m_vPaddleVel; 
      m_aBall[0].m_vPosition.z += 0.1f; 
   }


Ball.cpp:
Code:

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
if(m_vPosition.x >= m_pGame->m_vPaddlePos.x - 1.25f && 
      m_vPosition.x <= m_pGame->m_vPaddlePos.x + 1.25f && 
      m_vPosition.z <= m_pGame->m_vPaddlePos.z + 0.25f && 
      m_vPosition.z >= m_pGame->m_vPaddlePos.z - 0.25f) 
      { 
         if((m_pGame->m_aExtra[11].m_bActive == TRUE) && (m_pGame->m_fExtraTime >= 0.0f)) 
         {    
            m_bGrabbed = TRUE; 
         } 
         else if((m_pGame->m_aExtra[11].m_bActive == TRUE) && (m_pGame->m_fExtraTime < 0.0f)) 
         { 
            m_vVelocity.z *= -1.0f; 
            iBuffer = g_pImpact->m_apSound[5]->PlayAvailableBuffer(); 
          
            if(iBuffer != -1) 
            { 
               g_pImpact->m_apSound[5]->SetFrequency(iBuffer, 44100 + tbIntRandom(-5000, 5000)); 
            } 

            sprintf(m_pGame->m_cExtraText, ""); 

            if((m_pGame->m_aExtra[1].m_bActive == TRUE) && (m_pGame->m_fExtraTime >= 0.0f)) 
            { 
               m_vVelocity.x += m_pGame->m_vPaddleVel.x * 0.5f; 
               m_pGame->m_fExtraTime -= fTime;    
            } 
            else if((m_pGame->m_aExtra[1].m_bActive == TRUE) && (m_pGame->m_fExtraTime < 0.0f)) 
            { 
               m_vVelocity.x -= m_pGame->m_vPaddleVel.x * 0.5f; 
            } 
            else 
            { 
               m_vVelocity.x -= m_pGame->m_vPaddleVel.x * 0.5f; 
            } 
             
            m_pGame->m_aExtra[11].m_bActive = FALSE; 
         }


und dann hätte ich noch ne frage wie kann ich für ein double pad das pad um 180° gedreht rendern, für ein minipad stauchen und für ein mega pad strecken???

wäre geil wenn ihr mir helfen könnt weil alleine schaff ichs nicht ganz und ich will das projekt unbedingt fertig stellen

2

01.08.2004, 18:55

hallo?

also ich weiß ja net wenn ich so eure foren-themen lese dann seid ihr ein paar schritte weiter als ich und das problem hier zu lösen dürfte net allzuschwer sein denn ich kriegs wirklich net raus und brauch das um weiterzukommen =/

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

01.08.2004, 19:57

Das liegt daran das in dem Code der Fehler nicht zu liegen scheint. Mein Tipp kommentier nach und nach alles Sachen aus um den Fehler zu finden.
Und bei der größe würde ich mal skalieren versuchen.......

4

02.08.2004, 19:25

ich wusste doch auf nox is verlass =)

ich werde das mal probieren aber ich hab schon alles versucht und keine ahnung woran das liegen könnte...aber das muss so einfach funzen...der wird ja einfach in der ball.cpp auf grabbed gesetzt und das wars...ne andere möglichkeit wäre natürlich den ball zu löschen und nen neuen zu erstellen aber die find ich irgendwie kacka =)

ps: was meinst du mit skalieren?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

02.08.2004, 19:35

Hmm kannst du mir den kram vielleicht einfach an die emailaddy christian_bentler@gmx.de schicken damit es mal durchgehen kann?

Und zu dem Skalieren: tbObjekt.SetScaling(tbVector3)

6

03.08.2004, 19:48

aso du meinst der ball is einfach so klein dass man den net sieht wenn ich das richtig verstehe...ich denke aber der existiert gar nicht mehr denn die kamera ändert ihre perspektive und das ganze bild wird etwas heller es liegt allerdings auch nicht daran dass ich die velocity vom ball nicht zurückgesetzt hab und er imaginär trotzdem weiterfliegt ich bin ehrlich gesagt ratlos.

PS: mail is unnerwegs :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

03.08.2004, 20:25

Du wolltest wissen wie man Das Pad vergrößern oder verkleinern kan-> antwort: skalieren.....

ach ja du hast du inpact.h vergessen und wenn ich versuche es mir zusammen zu reimen bekomme ich hunderte von fehler, also tu mir einen gefallen udn zip den ordner und schick ihn mir dann....

8

05.08.2004, 09:04

also ich hab jetzt glaub alles bis auf die sounds und die .exe

das mit den paddle hab ich auch alles schon hinbekommen das einzige prob is dieser dämliche magnet :(

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

05.08.2004, 11:26

War ganz easy, nachdem ich den Kram geblickt habe, also du hast vergessen das die Renderfunktion so aussieht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tbResult CBall::Render(float fTime)
{
    tbMatrix mWorld;

    mWorld = tbMatrixTranslation(GetAbsPosition());
    tbDirect3D::SetTransform(D3DTS_WORLD, mWorld);
    
    if(!m_pGame->m_aExtra[14].m_bActive)
    {
        m_pGame->m_pBallModel->Render();
    }

    return TB_OK;
}

Also solange der Ball dran klebt, wird sein Pos-Vektor als relativ zum Pad angesehen, daher war die Zeile in diese Funktion

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
    if(m_vPosition.x >= m_pGame->m_vPaddlePos.x - 1.25f &&
       m_vPosition.x <= m_pGame->m_vPaddlePos.x + 1.25f &&
       m_vPosition.z <= m_pGame->m_vPaddlePos.z + 0.25f &&
       m_vPosition.z >= m_pGame->m_vPaddlePos.z - 0.25f)
    {
        if((m_pGame->m_aExtra[11].m_bActive == TRUE) && (m_pGame->m_fExtraTime >= 0.0f))
        {
            m_bGrabbed = TRUE;
            m_vPosition = m_pGame->m_vPaddlePos + 0.25f;        }
    }

in diese umzuändern

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    if(m_vPosition.x >= m_pGame->m_vPaddlePos.x - 1.25f &&
       m_vPosition.x <= m_pGame->m_vPaddlePos.x + 1.25f &&
       m_vPosition.z <= m_pGame->m_vPaddlePos.z + 0.25f &&
       m_vPosition.z >= m_pGame->m_vPaddlePos.z - 0.25f)
    {
        if((m_pGame->m_aExtra[11].m_bActive == TRUE) && (m_pGame->m_fExtraTime >= 0.0f))
        {
            m_bGrabbed = TRUE;
            m_vPosition = tbVector3(0.0f, 0.0f, 0.26f);
        }
    }

Der Wert 0.26f musste sein, damit es nicht sofort wieder festklebt, wenn man den Ball loslassen will.
Auch muss du diese Funktion ändern

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    if(g_pbButtons[TB_KEY_SPACE] &&
            m_aBall[0].m_bExists &&
            m_aBall[0].m_bGrabbed &&
            m_aExtra[11].m_bActive)
    {
        g_pImpact->m_apSound[3]->PlayAvailableBuffer();
        m_aBall[0].m_vPosition = (0.0f, 0.0f, 0.25f);
        m_aBall[0].m_vVelocity = (0.0f);
        m_aBall[0].m_bGrabbed = FALSE;
        m_aBall[0].m_vPosition += m_vPaddlePos;
        m_aBall[0].m_vVelocity.x = 0.0f;
        m_aBall[0].m_vVelocity.y = 0.0f;
        m_aBall[0].m_vVelocity.z = 9.0f;
        m_aBall[0].m_vVelocity += m_vPaddleVel;
        m_aBall[0].m_vPosition.z += 0.1f;
    }

und zwar in:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    if(g_pbButtons[TB_KEY_SPACE] &&
            m_aBall[0].m_bExists &&
            m_aBall[0].m_bGrabbed &&
            m_aExtra[11].m_bActive)
    {
        g_pImpact->m_apSound[3]->PlayAvailableBuffer();
        m_aBall[0].m_bGrabbed = FALSE;
        m_aBall[0].m_vPosition += m_vPaddlePos;
                m_aBall[0].m_vVelocity = m_vPaddleVel + tbVector3(0.0f, 0.0f, 9.0f);;
        m_aBall[0].m_vPosition.z += 0.1f;
    }

10

08.08.2004, 19:13

aaaaah...hört sich sehr logisch an...wenns klappt wärs noch geiler =)

thx thx thx und nochmal thx

Werbeanzeige