3rd-Person Kamera mit TFormPoint
Übersicht

HopsBetreff: 3rd-Person Kamera mit TFormPoint |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Abend allerseits..
Da mich die 3rd-Person Ansicht schon länger gereizt hat, hab ich mich mal hier im Forum umgeschaut und bin auf dieses Verfahren gestoßen: 3rd-Person-Beispiel Sieht ja schön einfach aus und klappt auch wunderbar.. bis ich versucht habe, eine einfache Sprung-Funktion einzubauen. Ich hab mir heute mal alles was ich zum Thema TForm gefunden habe angeschaut aber in allen Beispielen die ich gelesen habe wurde genau immer nur die Übertragung von Lokalen in Globale Koordinaten (o. andersherum) erklärt, nicht aber zwischen zwei (anscheinend) sogenannten Objekt Lokalen Koordinaten, wie sie in dem Beispiel oben verwendet wird. Um mein Problem zu beheben müsste ich mich besser mit der Materie auskennen und hoffe daher auf eure Hilfe! Das Problem ist folgendes: Ich habe diese Funktion vom Beispiel übernommen und angepasst: Code: [AUSKLAPPEN] Function camera_ausrichten() PointEntity camera, cam_target TFormPoint 0,4,-8, cam_target, camera MoveEntity camera, TFormedX()/30,TFormedY()/30,TFormedZ()/30 End Function Klappt soweit wunderbar, wiegesagt bis ich zum Springen gekommen bin.. Hier der (lauffähige) Code, in dem alles das Problem betreffende drin ist: Pfeiltasten bewegen, Leertaste springen, dann sieht man das Problem Code: [AUSKLAPPEN] ;---Voreinstellungen--- Const W = 1024 Const H = 768 Graphics3D W,H SetBuffer BackBuffer() ;---Voreinstellungen--- ;---Kamera--- Global camera = CreateCamera() ;---Kamera--- ;---Spieler--- Global spieler = CreatePivot() ; Pivot, der den Spieler darstellt MoveEntity spieler, 0,10,0 EntityRadius spieler, 1 EntityType spieler, 1 Global cam_target = CreatePivot(spieler) ; Pivot, der etwas erhöt wird und als Ziel, auf welches die Kamera zeigt, dient MoveEntity cam_target, 0,3,0 sphere = CreateSphere(8, cam_target) ; Kugel, die die Position des Kamera-Ziel-Pivots anzeigt ScaleEntity sphere, 0.1,0.1,0.1 Global spieler_mesh = CreateCube(spieler) ; Würfel, der den Spieler sichtbar macht ;---Spieler--- ;---Umgebung--- Global ground = CreatePlane() EntityColor ground, 90,90,120 EntityType ground, 2 ;---Umgebung--- ;---Variablen--- Collisions 1,2,2,2 Global speed# = 0.15 ; Bewegungsgeschwindigkeit Global sprung ; Sprung=1 bedeutet Spieler im Sprung Global sprungkraft# ; "Auftrieb" beim Springen Global gravity# = 0.5 ; Schwerkraft ;---Variablen--- ;+-+-+-+-+-+-+-+ Hauptschleife +-+-+-+-+-+-+-+ Repeat steuerung() camera_steuerung() Cls UpdateWorld RenderWorld Flip Until KeyHit(1) End ;+-+-+-+-+-+-+-+ Hauptschleife +-+-+-+-+-+-+-+ ;############################### FUNKTIONEN ############################### ;---Spieler-Steuerung--- Function steuerung() If KeyDown(200) Then MoveEntity spieler, 0,0,speed EndIf If KeyDown(208) Then MoveEntity spieler, 0,0,-speed/2 EndIf If KeyDown(203) Then TurnEntity spieler, 0,2,0 EndIf If KeyDown(205) Then TurnEntity spieler, 0,-2,0 EndIf ;---Springen--- If KeyHit(57) And sprung = 0 Then sprung = 1 sprungkraft = 1 EndIf If sprung = 1 Then sprungkraft = sprungkraft - 0.01 EndIf ;---Springen--- TranslateEntity spieler, 0,-gravity +sprungkraft, 0 ;Simulieren der Schwerkraft und wenn Sprungkraft vorhanden -> "Springen" End Function ;---Spieler-Steuerung--- ;---Steuerung-der-3rd-Person-Kamera--- ; Macht irgendwie bei/nach dem Springen Probleme: Function camera_steuerung() PointEntity camera, cam_target TFormPoint 0,4,-8, cam_target, camera MoveEntity camera, TFormedX()/30,TFormedY()/30,TFormedZ()/30 End Function ;---Steuerung-der-3rd-Person-Kamera--- Ich hoffe das Problem lässt sich beheben, da ich ungern auf die TForm methode verzichten würde weil die "normale" Kamera-Führung mit z.b. X-Differenz*0.5 o.ä. nicht so schön sanft schwingt. Eine neue, ähnlich sanfte Methode wäre natürlich auch jederzeit willkommen!! Mfg |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heyho Hops!
(passender Name beim Thema) Dir fehlt schlicht folgende Zeile in Steuerung(): Code: [AUSKLAPPEN] If sprungkraft <= 0 Then sprung = 0
Das liegt am Kollisionssystem von Blitz. Die Einheit wird zunächst bewegt und erst bei UpdateWorld() zurückgesetzt, falls sie kollidiert. Da sprungkraft# bei dir immer negativer wird, erfasst die Kamerasteuerung deine Einheit als immer tiefer im Boden und bewegt sich entsprechend in den Boden. Das hat allerdings nichts mit TFormPoint zu tun. Dieses hast du schon richtig verwendet. |
||
MrKeks.net |
Hops |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wow, dankeschön!
das wars, ja.. das war der startschuss.. ![]() mfg |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group