Schwerkraft bei Mesh und Terrain

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

draco

Betreff: Schwerkraft bei Mesh und Terrain

BeitragDo, Nov 01, 2007 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink auch da ist mein problem
 

BlackError

BeitragDo, Nov 01, 2007 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Nov 02, 2007 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Nov 02, 2007 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Nov 02, 2007 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Nov 02, 2007 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
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

BeitragFr, Nov 02, 2007 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Nov 06, 2007 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Razz

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

BeitragDo, Nov 08, 2007 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group