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

17.12.2007, 22:05

tbObject: Figur springen lassen und Kollision

Hallo.
Ich probiere nun selber 3D Blobby Volley zu schreiben. Die Models und das Menü stehen schon. Das Bewegen der Spielfigur funktioniert auch.
Ich habe jetzt für den Ball und für die Figure die Klasse tbObject benutzt.
Doch wie kann ich es am realistischten Springen lassen?
Ich habe schon probiert bei Tastendruck eine Kraft nach oben wirken zulassen. Doch nur das runter ist ein problem.
Ich wollte das so gestalten, dass man hinterher im Menü die Erdanziehungskraft angeben kann. Doch ich bin am verzweifeln wie man das machen kann.
(Wir haben zwar in Pysik gerade Kräfte aber leider noch nicht Beschleunigung)
Vielleicht könnt ihr mir ja da weiter helfen.

Außerdem probiere ich gerade eine den Ball beim berühren der Spielfigur abspringen zulassen.

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
int gravity=20; //Anziehungskraft

        tbVector3 Attack;   //Angriffspunkt beim Treffen des Balles

        if(!Ballfree)   //Ist der ball frei oder beim Aufschlag

        {
            oBall->SetPosition(tbVector3(0,40,-20));    //Beim aufschlag->also ball auf Startposition

            oBall->SetVelocity(tbVector3(0,0,0));
            if(tbModelHitsModel(g_mPlayer, oPlayer->GetMatrix(), oPlayer->GetInvMatrix(),
                g_mBall, oBall->GetMatrix(), oBall->GetInvMatrix(), &Attack))   //Prüfen ob Spielermodel das Ballmodel trifft

            {
                Ballfree=true;  //Jetzt den ball freisetzen

                oBall->ApplyForce(Attack,oPlayer->GetVelocity());   //Kraft auf den Ball auswirken

                tbWriteToLog("Aufgabe gespielt.");
            }
        }else{
            //Ball ist im Spiel

            if(tbModelHitsModel(g_mPlayer, oPlayer->GetMatrix(), oPlayer->GetInvMatrix(),
                g_mBall, oBall->GetMatrix(), oBall->GetInvMatrix(), &Attack))   //Kollision prüfen

            {
                oBall->ApplyForce(Attack,oPlayer->GetVelocity()); //Kollision vorhanden-> Kraft ausüben

                tbWriteToLog("Hit!");
            }

            oBall->AddVelocityRel(tbVector3(0,-gravity,0)); //Kraft nach unten wirken lassen



            if(oBall->GetPosition().y>=0)       //Wenn Ball aus, dann neuer Aufschlag   

                Ballfree=false;
            
        }


Doch wenn man nun den Ball berührt ist dieser plötzlich weg. Was mache ich da falsch?

Gruß Flo

2

17.12.2007, 22:13

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
foat Gravity=1;

float YPos=0;
float YSpeed=0;


while(Gameloop)
{
if(Sprungtaste)
{
  YSpeed=15;
}
YPos+=YSpeed;
YSpeed-=Gravity;

if(Spielder am Boden)
{
YSpeed=0;
//evtl. ypos anpassen

}
}


Gut der Spieler würde also ständig ein Stück in den Boden fallen, das muss man halt abfangen. Aber ansonsten ist das so ein parabelförmiger Sprung und damit halbwegs realistisch.

Und mit tbObject hat das ja jetzt wenig zu tun, das ist ja einfach nur GameLogik die von der Darstellung vollkommen unabhängig ist.

Achja, pass mit dem Namen auf, entweder Nachfragen, ob es das offizielle BLobbyVolley 3d wird oder nenns halt anders ('Extrem Vollyball Action' oder so), Namen klauen ist nämlich nicht nett.
Lieber dumm fragen, als dumm bleiben!