Schwerkraft bei Mesh und Terrain
Übersicht

![]() |
dracoBetreff: Schwerkraft bei Mesh und Terrain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Abend,
Ich weiss, dieses Thema gabs schon allzu oft und auch die Suche spuckt einiges aus, aber dort wird überall ein Schritt weiter besprochen. Also folgendes Problem: Wenn ich eine normale (nicht realistische, wird aber auch nicht benötigt) Schwerkraft für mein Terrain bastle, mach ich ja einfach Code: [AUSKLAPPEN] Collisions cam_type,terrain_type,2,2
TranslateEntity cam,0,-1,0 Soweit kein Problem, doch wenn ich Treppen (Als 3D-Objekt) usw. benutzen will, steh ich auf dem Schlauch, da ich die Treppe nur hochlaufen kann, wenn die Kamera auch nach oben gerichtet ist. (Kollisionen mit der Treppe sind vorhanden) Zur Erläuterung: Ich habe eine 1st person-Perspektive, folgende Maus-Bewegunsbefehle: Code: [AUSKLAPPEN] TurnEntity camera,0,-(msx#/5),0,True:TurnEntity camera,(msy#/5),0,0 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 und folgende Tastatur-Steuerung: Code: [AUSKLAPPEN] MoveEntity camera,(KeyDown(32)-KeyDown(30))*gaspeed#/6,0,(KeyDown(17)-KeyDown(31))*gaspeed#/6
(gaspeed# ist die Echtzeitberechnung) Wie kann ich eine Schwerkraft machen und trotzdem z.b. eine Treppe immer gleichmäßig hochlaufen? PS: Beim Terrain hatte ich schon folgendes, aber das lässt sich ja nicht auf ein Mesh verwenden: Code: [AUSKLAPPEN] PositionEntity camera,EntityX(camera),TerrainY(terrain,EntityX(camera),0,EntityZ(camera))+4,EntityZ(camera)
edit: Wichtiger ist noch, dass CameraY immer +3 ist, damit die Kamera nicht auf dem Boden hängt ![]() |
||
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo draco,
Im Grunde musst du gar nichts verändern. Habe es gerade selbst probiert. ich hab ledentlich: - eine gravitation durch translateentity cam, 0,-1,0 erstellt - eine collision mit dem Boden erstellt - eine collision mit der cam und der treppe erstellt Trotz der gravitation lässt sich die cam einfach die treppe hochbewegen (bei mir zumindeset). Gegebenfalls musst du vielleicht einfach noch bei der collision zwischen cam und treppe den entityradius der cam vergrössern. aber eigentlich müsste es auch so schon gehen. Hoffe, ich konnte dir helfen. Gruss BlackError |
||
![]() |
draco |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja schon, aber wenn du mit der maus z.b. auf den boden guckst, dann kannst du nicht mehr nach vorne gehen sondern nach "unten" durch den boden... | ||
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dann habe ich dich ein wenig falsch verstanden, bzw. etwas überlesen. Um ehrlich zu sein ist mir das gleiche bei meinem versuch auch passiert und habe mich gewundert warum (da die collission dies eigentlich verhindern sollte).
Und wenn du die sicht nach "ganz" unten beschränkst? also dass man nur z.b. in einem 80 grad winkel nach unten schauen kann. vielleicht löst das das Problem?? Gruss BlackError |
||
![]() |
draco |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein auch das ist es nicht, denn der spieler bewegt sich dann immernoch am schnellsten, wenn er genau nach vorne schaut. auch ein bisschen nach unten macht den spieler langsamer.
die methode mit der höhe vom terrain ausrechnen ist ansich genau das was ich suche, allerdings geht das wiegesagt nicht für 3D-objekte... edit: Ich habe jetzt die Lösung zu dem Problem mit geschwindigkeitsverlust bei nach oben- oder untenschauen: ich habe ein zweites objekt gemacht, welches mit der tastatur gesteuert wird und NUR mit dem Yaw-Winkel der Kamera rotiert. Die maussteuerung ist geblieben. Funktioniert auch alles super, ich kann die Kamera sogar +3 über den boden plazieren das man nicht auf dem Boden hängt: Code: [AUSKLAPPEN] positionentity camera,EntityX(player),EntityY(player)+3,EntityZ(player)
player ist dabei das 2. objekt, einfach ein erstellter würfel. kollisionen funktionieren auch, nur ich kann die treppe GARNICHT mehr hochlaufen... //2. edit: mir ist eine gute Idee gekommen: Code: [AUSKLAPPEN] If EntityCollided(player,8)=bude Then TranslateEntity player,0,1,0 Else TranslateEntity player,0,-1,0 Endif Das ist GENAU das was ich gesucht hatte, bleibt mir nur noch Ein Problem: Wenn der Spieler gerade in der "bude" drin ist, also nicht gerade eine Treppe hochgeht, aber trotzdem collidiert, dann "zappelt" er immer hoch und runter... das soll natürlich nicht sein, hoffentlich hat einer ne idee wie man das vermeiden kann... |
||
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo nochmal,
Das wird nicht gehen, Code: [AUSKLAPPEN] If EntityCollided(player,8)=bude Then TranslateEntity player,0,1,0 Else TranslateEntity player,0,-1,0 Endif weil das translateetntiy player, 0,1,0 bewirgt eine STÄNDIGE positionsverschiebung des players nach oben. also wäre der player im freien, würde er einfach nach oben abheben. Im haus müsste er dem nach immer an der Decke hängen ![]() Da du jedoch vom boden abhebst, besteht keine kollision mehr mit dem haus (player berührt es nicht mehr) deshalb geschieht ja das: Else TranslateEntity player,0,-1,0 Endif Wenn er wieder den boden berührt, wird er wieder nach oben geschoben. somit entsteht eine grosse wackelei des players. Eine Idee wäre es vielleicht, die treppe per "findchild" oder so ähnlich anzusprechen. Weiss aber selbst nicht recht, wie der Befehl funktioniert. In dem 3D Editor müsste die Treppe eben als einzelnes Objekt benannt worden sein. also eine exta "grupee" von vertexen im Haus. Wenn das so ist, müsste man die treppe mit dem entsprechenden namen einzeln angesprochen werden können. Gruss BlackError |
||
![]() |
draco |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja da hast du recht da müsste die treppe ein einzelnes objekt sein... hmm ich hab jetzt das ganze haus als ein objekt, ich muss mal gucken wie ich das hinbekomme, aber dann wackelt er doch auf der treppe genauso... hat jemand sonst noch eine andere möglichkeit? | ||
Roterblitz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
draco hat Folgendes geschrieben: ja da hast du recht da müsste die treppe ein einzelnes objekt sein... hmm ich hab jetzt das ganze haus als ein objekt, ich muss mal gucken wie ich das hinbekomme, aber dann wackelt er doch auf der treppe genauso... hat jemand sonst noch eine andere möglichkeit?
Hi zum Thema Treppen, damit deine Camera nicht irgenwo an der Treppe hängen bleibt setze einfach auf jede Treppe ein zusätzliches Flächen Objekt was nur der Collisions Abfrage dient, also mit EntityAlpha TreppenCollisionsPlane,0 nicht gerendert wird. Deine Treppe wird somit zu einer einfachen RAMPE... und auf ner Rampe ist es nun wieder hoch und runter gleiten anstatt ruckeln ![]() Und die Schwerkraft ist überall gleich... bastel btte keine andere Schwerkraft rein nur für ne Treppe, Schwerkraft ändert man wenn überhaupt nur wenn die Spielfigur springen oder fallen soll. Desweitern kannst du über CreateCamera ( [parent] ) deiner Camera ein parent Entity mitgeben... Du benutzt wie ich gesehen habe : positionentity camera,EntityX(player),EntityY(player)+3,EntityZ(player) Wenn aber dein Player schon parent der Camera wäre würde die Camera automatisch deinem Player folgen, das Player Object würde dann auch die Collision auslösen und es ergeben sich dadurch viel mehr möglichkeiten bei der Feinabstimmung deiner Collisionen. Ich weiss nun nicht wie dein PlayerObject aufgebaut ist, für die Collision abfragen sollte es idealer Weise einfache Kugel sein. hope this helps a bit |
||
User posted image |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So fände ich besser weil das ja ne beschleunigung nach unten sein soll
Beim springen wird bei yg was drauf addiert bis man abhebt Y ist die Position YG die Geschwindigkeit G=0.1 yg=yg-g ;im freien Fall if y<0 then y=0:yg=0 ;wenn man auf dem Boden steht TranslateEntity player,0,yg,0 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group