Realistisches Laufen
Übersicht

![]() |
FuchsiBetreff: Realistisches Laufen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin bei meinem First-Person Rollenspiel schon ziemlich weit. Auch das
Laufen, Treppensteigen, Springen usw. Klappt alles super. Jetzt wollte ich aber einbauen, dass sich die Kamera so bewegt, als ob man richig laufen würde. Also auf und ab, oder so ähnlich. Weiß wer von euch wie das geht ? Gruß Fuchsi ! |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielleicht:
Code: [AUSKLAPPEN] if switch=0 then moveentity cam,0,.1,0:switch=1 else moveentity cam,0,-.1,0:switch=0 endif sowas könnte man dann auch noch mit Turnentity machen... |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sowas ginge mit einer Sinusfunktion und TranslateEntity o.Ä.
Also ungefähr so: Code: [AUSKLAPPEN] sinusvariable=sinusvariable+1
TranslateEntity camera,0,sin(sinusvariable),0 Eventuell muss man den Sinuswert verkleinern, um eine allzu schwankende Bewegung zu vermeiden. Also "sin(sinusvariable)" durch "sin(sinusvariable)/Korrekturwert" ersetzen. |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antwort. Ich hab mal das mit der Sinusvariable probiert, aber da tut sich garnichts. | ||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nichts? Seltsam. Dann hab ich mich wohl geirrt. Habe es selbst nie ausprobiert. | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da tut sich nichts wenn...
...danach wieder PositionEntity benutzt wird. ...die Schwingung zu gering ist. Also nicht genügend multipliziert wird. ...die Zählervariable zu langsam ansteigt und eine Bewegung nicht bewusst wargenommen wird. |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja du hast recht ich positioniere die Camera mit positonentity. Aber
ich mache es so: Code: [AUSKLAPPEN] y_dif=sin(sinusvariable) positionentity cam,entityx(player),entityy(player)+y_dif,entityz(player) |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du sinusvariable permanent am durchzählen? Wenn ja, versuche mal y_dif mit einem zusätzlichen Multiplikator zu addieren um eine mögliche Bewegung sichtbar zu machen... | ||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was hectic damit meint: Irgendwo in der Hauptschleife müsste der Code sinusvariable=sinusvariable+irgendwas stehen. Sollte das der Fall sein, solltest du den Sinus der Sinusvariable noch multiplizieren. Der unmultiplizierte Sinus schwankt ja nur zwischen 1 und -1, daher könnte es erforderlich sein, ihn zu multiplizieren. Kommt ganz auf den Maßstab an, den du verwendest. | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ähhh, ja, da fällt mir noch was ein... Ein normaler Mensch macht so etwa 2-3 Schritte pro Sekunde. Demnach sollte bei ~60FPS sinusvariable=sinusvariable+'''in etwa bei'''12 bis 18 sein. Ausserdem gibt es ein Unterschied zwischen MoveEntity und PositionEntity. Genau diesen Unterschied machst du bei PositionEntity durch deine Berechnung EntityY(player)+y_dif wieder zu nichte... Unter anderem kann auch das der Grund sein, warum keine Bewegung in der Richtung zu stande kommt. Da eine Gravitation jede Bewegung wieder nach unten zieht. Man, schwer zu erklären... ![]() |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Drehung und Positionierung der Camera und des Players:
Code: [AUSKLAPPEN] Function turning() y_dif=sin(sinusvariable) PositionEntity cam,EntityX(player),EntityY(player)+y_dif,EntityZ(player) RotateEntity player,0,EntityYaw(player)-MouseXSpeed()*0.2,0 RotateEntity cam,EntityPitch(cam)+MouseYSpeed()*0.2,EntityYaw(player),0 If EntityPitch(cam) > 85 Then RotateEntity cam,85,0,0 EndIf MoveMouse 400,300 End Function Gravitation : Code: [AUSKLAPPEN] Function gravy() TranslateEntity player,0,-0.2,0 If EntityCollided(player_dummy,2) = False Then TranslateEntity player,0,player_grav#,0 EndIf End Function |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist sinusvariable auch Global?
Und hier das Problem was ich vorhin befürhtet habe... Nach einer Sinusgangbewegung wird durch die Gravitation diese wieder geglättet... Das Problem ist, das alles mit relativen Berechnungen gemacht wird... Versuche mal zu testzwecken erst die gravy() -Funktion und dann die turning() -Funktion aufzurufen... Und verstärke mal die Sinusbewegung mit beispielsweise erstmal um das Zehnfache ...EntityY(player)+y_dif*10... und zusätzlich ...y_dif=sin(sinusvariable*30).... Auch wenn die Werte übertrieben sein werden, helfen sie der Fehlersuche enorm... Hier noch etwas...Code: [AUSKLAPPEN] ...
RotateEntity cam,EntityPitch(cam)+MouseYSpeed()*0.2,EntityYaw(player),0 If EntityPitch(cam) > 85 Then RotateEntity cam,85,0,0 EndIf ... Wenn Kameraneigung zu groß wird, wird auch Y und Z auf Null gesetzt! Soll das so sein? |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, eigentlich nich. Danke für die Tipps. ![]() Wenn ich y_dif mit 30 multipliziere dann wird nur die Kamera nur höher hinauf versetzt, und sie bewegt sich nich auch und ab. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group