EntityPick Problem
Übersicht

![]() |
MegamagBetreff: EntityPick Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, es gibt wieder Probleme mit der Kameraführung.
Es geht darum, wenn sich ein Hindernis zwischen Player und Kamera befinded, sich die Kamera nach vorne vor das Hindernis bewegen/springen soll. Denn sonst ist die irgendwie hinter Wänden und Co verschwunden, was eine Navigation unmöglich macht. Hier ist der Code+Mediendaten: https://www.blitzforum.de/upload/file.php?id=5972 FÜhrt den mal aus, dann geht ihr nach hinten (W,A,S,D + Maus) wo die Tür ist, und dann geht ihr nach rechts, sodass die eine Wand zwischen der Kamera und dem Player ist. Die Kamera sollte jetzt vor die Wand springen, sie bleibt aber hinter der Wand, und wackelt komisch hin und her, wird unkontrollierbar. Wo liegt der Fehler im Code? EDIT: Ok, ich weiß nicht, warum hier keiner Antwortet. Habt ihr keine Lust, die FIles runterzuladen? Falls dem so ist, hier nochmal der Code, ohne Dateien: Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 1
SetBuffer BackBuffer() Const links = 30 Const rechts = 32 Const hoch = 17 Const runter = 31 Const C_CAM=1 Const C_CC=2 Collisions C_CAM,C_CC,2,3 Global cam=CreateCamera() EntityType cam,C_CAM Global player=CreateCube() EntityRadius player,1.8 EntityType player,1 Global playerpiv=CreateSphere(16,player) ScaleEntity playerpiv,.3,.3,.3 PositionEntity playerpiv,0,3,0 EntityAlpha playerpiv,0.5 PositionEntity player,0,-30,120 ;Global cam2=CreateCamera() ;PositionEntity cam2,0,20,-20 ;PointEntity cam2,player light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\level1.b3d") ScaleEntity scene,2,2,2 PositionEntity scene, 0, 0, 0 EntityType scene,C_CC EntityPickMode scene,2 ;EntityColor scene,0,80,0 tree=CreateCube() PositionEntity tree,0,0,-18 ScaleEntity tree,3,4,3 EntityPickMode tree,2 Global XXX#=20 Global YYY#=20 Global ZZZ#=20 Global c#=0 Global picked# picko=CreatePivot() ;----------------------------------------------------------------------------; While Not KeyHit(1) picked=EntityPick(cam,XXX) If picked>0 Then PositionEntity picko,PickedX(),PickedY(),PickedZ() XXX=EntityDistance(picko,player) EndIf winkel=winkel-MouseXSpeed()/2 winkel2=winkel2+MouseYSpeed()/1.8 X# = XXX * Cos( winkel ) * Cos( winkel2 ) Y# = XXX * Sin( winkel2 ) Z# = XXX * Sin( winkel ) * Cos( winkel2 ) PositionEntity cam,EntityX(player)+x,EntityY(player)+y,EntityZ(player)+z RotateEntity player,EntityPitch(player),winkel+90,EntityRoll(player) If XXX>20 XXX=20 If EntityY(cam)<EntityY(player) Then ;EntityY(cam)<EntityY(player)-1 Then ;PositionEntity cam,EntityX(cam),EntityY(player),EntityZ(cam) XXX=c# EndIf If EntityDistance(cam,player)<19.5 And picked=0 Then XXX=c# EndIf PointEntity cam,playerpiv MoveMouse 512,384 If KeyDown(hoch) MoveEntity player,0,0,0.3 If KeyDown(runter) MoveEntity player,0,0,-0.3 If KeyDown(links) MoveEntity player,-0.3,0,0 If KeyDown(rechts) MoveEntity player,0.3,0,0 UpdateWorld RenderWorld a#=EntityPitch(cam)*EntityPitch(cam) b#=EntityPitch(cam)/a c#=b*-200 Text 0,0,"picked: "+picked Text 0,30,"Abstand cam-player: "+XXX+"m" Flip Wend End ;----------------------------------------------------------------------------; EDIT2: Weiß echt keiner eine Lösung? Das kann doch gar nicht sein? |
||
- Zuletzt bearbeitet von Megamag am Mo, Jul 06, 2009 20:59, insgesamt einmal bearbeitet
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Benutze LinePick.
Einfach die Achse oder "Linie" von der Spielfigur in die Richtung wo die Kamera wäre, und dann den Kollisionspunkt bestimmen und die Entfernung vergleichen. Wenn sie kleiner ist als die Entfernung der gewollten Kamperaposition dann muss sie auf dem Kollisionspunkt platziert werden. Außerdem braucht deine Kamera keine Kollision ![]() Edit: Habe gerade dein anders Problem gesehen: Man kann es auch mit Kollision machen. Einfach die Kamera in der Spielfigur platzieren, und dann in die Richtung bewegen in der die Kamera sein soll, wenn sie auf eine Wand stößt bleibt sie ja stehen. |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe ich alles schon versucht, nichts hat geklappt.
Wenn ich die Kamera auf den Spieler setze, passiert gar nichts. Die Kollision der Cam ist notwendig, um nicht durch die Wände zu gehen. LinePick funktioniert nich korrekt, deshalb habe ich es gelassen. Aber trotzdem danke für die Antwort! |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
du musst die kollision der kamera entfernen und den linepick zum laufen bringen dann passt des schon | ||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber ich brauche die Kollision.
Wenn man sich soinst vor eine Wand stellt, und dann dreht, dann ist die KAmera durch die Wand. So slided sie an der Wand entlang. |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, ich kuck mir das mal an... | ||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mir mal Gedanken darüber gemacht und bin zu folgender Lösung gekommen: Jeden Schleifenduchlauf werden die Collisions gecleart, die Camera wird an Position der Player gebracht, dann kommt UpdateWorld, weil sich die gesetzten Collisions erst in UpdateWorld auswirken, dann werden die Collisions wieder gesetzt und die Camera wird an die Position geschoben, an die sie eigentlich hinsoll. Dabei kollidiert sie gegen die Wände, die sich zwischen Player und der Sollposition befinden.
Das ist zwar nicht so super mit dem UpdateWorld zwei mal in der Schleife, aber es ist immerhin eine Lösung Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 1
SetBuffer BackBuffer() Const links = 30 Const rechts = 32 Const hoch = 17 Const runter = 31 Const C_CAM=1 Const C_CC=2 Const C_PLAYER=3 Collisions C_CAM,C_CC,2,3 Collisions C_PLAYER,C_CC,2,3 Global cam=CreateCamera() EntityType cam,C_CAM Global player=CreateCube() EntityRadius player,1.8 EntityType player,C_PLAYER Global playerpiv=CreateSphere(16,player) ScaleEntity playerpiv,.3,.3,.3 PositionEntity playerpiv,0,3,0 EntityAlpha playerpiv,0.5 PositionEntity player,0,-25,120 ;Global cam2=CreateCamera() ;PositionEntity cam2,0,20,-20 ;PointEntity cam2,player light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\level1.b3d") ScaleEntity scene,2,2,2 PositionEntity scene, 0, 0, 0 EntityType scene,C_CC EntityPickMode scene,2 ;EntityColor scene,0,80,0 tree=CreateCube() PositionEntity tree,0,0,-18 ScaleEntity tree,3,4,3 ;EntityPickMode tree,2 Global XXX#=20 Global YYY#=20 Global ZZZ#=20 Global c#=0 Global picked# ;----------------------------------------------------------------------------; While Not KeyHit(1) winkel=winkel-MouseXSpeed()/2 winkel2=winkel2+MouseYSpeed()/1.8 X# = 20 * Cos( winkel ) * Cos( winkel2 ) Y# = 20 * Sin( winkel2 ) Z# = 20 * Sin( winkel ) * Cos( winkel2 ) ClearCollisions() PositionEntity cam,EntityX(player),EntityY(player),EntityZ(player) UpdateWorld() Collisions C_CAM,C_CC,2,3 Collisions C_PLAYER,C_CC,2,3 TranslateEntity cam, x, y, z RotateEntity player,EntityPitch(player),winkel+90,EntityRoll(player) XXX=EntityDistance(cam,player) PointEntity cam,playerpiv MoveMouse 512,384 If KeyDown(hoch) Then MoveEntity player,0,0,0.3 If KeyDown(runter) Then MoveEntity player,0,0,-0.3 If KeyDown(links) Then MoveEntity player,-0.3,0,0 If KeyDown(rechts) Then MoveEntity player,0.3,0,0 UpdateWorld RenderWorld Text 0,30,"Abstand cam-player: "+XXX+"m" Flip Wend End edit: Eigentlich müsste das Code: [AUSKLAPPEN] PointEntity cam,playerpiv vor die Kamerabewegung, damit sie auch wirklich auf die richtige stelle zeigt, doch dann wackelt alles ganz komisch...
|
||
1 ist ungefähr 3 |
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hatts mal probiert mit
"wenn camera kollidiert dann wird ein linepick nach hinten gemacht, die kollision der cam deaktiviert, die cam gesetzt, die kollision wieder aktiviert" bei mir hats auch so blöde gewackelt, argh, bin unfähig :/ |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich danke euch vielmals. ![]() Nur kann sich einer von euch das Ruckeln erklären? Ich habe jetzt einiges ausprobiert, aber ich kriegs nicht weg... Woran liegt es denn überhaupt? |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
lol, wenn ich das wüsste ![]() |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mal folgendes ausprobiert:
Code: [AUSKLAPPEN] Const runter = 31
Const C_CAM=1 Const C_CC=2 Const C_PLAYER=3 Collisions C_CAM,C_CC,2,3 Collisions C_PLAYER,C_CC,2,3 Global cam=CreatePivot() EntityType cam,C_CAM Global camera=CreateCamera() Global player=CreateCube() EntityRadius player,1.8 EntityType player,C_PLAYER Global playerpiv=CreateSphere(16,player) ScaleEntity playerpiv,.3,.3,.3 PositionEntity playerpiv,0,3,0 EntityAlpha playerpiv,0.5 PositionEntity player,0,-25,120 ;Global cam2=CreateCamera() ;PositionEntity cam2,0,20,-20 ;PointEntity cam2,player light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\level1.b3d") ScaleEntity scene,2,2,2 PositionEntity scene, 0, 0, 0 EntityType scene,C_CC EntityPickMode scene,2 ;EntityColor scene,0,80,0 tree=CreateCube() PositionEntity tree,0,0,-18 ScaleEntity tree,3,4,3 ;EntityPickMode tree,2 Global XXX#=20 ;----------------------------------------------------------------------------; While Not KeyHit(1) winkel=winkel-MouseXSpeed()/2 winkel2=winkel2+MouseYSpeed()/1.8 X# = 20 * Cos( winkel ) * Cos( winkel2 ) Y# = 20 * Sin( winkel2 ) Z# = 20 * Sin( winkel ) * Cos( winkel2 ) XXX=EntityDistance(camera,player) PositionEntity camera,EntityX(cam,True),EntityY(cam,True),EntityZ(cam,True) PointEntity camera,playerpiv ClearCollisions() PositionEntity cam,EntityX(player),EntityY(player),EntityZ(player) UpdateWorld() Collisions C_CAM,C_CC,2,3 Collisions C_PLAYER,C_CC,2,3 TranslateEntity cam, x, y, z RotateEntity player,EntityPitch(player),winkel+90,EntityRoll(player) MoveMouse 512,384 If KeyDown(hoch) Then MoveEntity player,0,0,0.3 If KeyDown(runter) Then MoveEntity player,0,0,-0.3 If KeyDown(links) Then MoveEntity player,-0.3,0,0 If KeyDown(rechts) Then MoveEntity player,0.3,0,0 UpdateWorld RenderWorld Text 0,30,"Abstand cam-player: "+XXX+"m" Flip Wend End Das geht ohne Ruckeln, nur bin ich mit dem doppelten Updateworld irgendwie nicht so glücklich. Naja, solange es erstmal läuft... |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
yeah!
ich hab die kollision ganz rausgenommen und jetzt funktionierts wunderbar. Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 2
SetBuffer BackBuffer() Const links = 30 Const rechts = 32 Const hoch = 17 Const runter = 31 Const C_CAM=1 Const C_CC=2 Collisions C_CAM,C_CC,2,3 Global cam=CreateCamera() EntityType cam,C_CAM Global player=CreateCube() EntityRadius player,1.8 EntityType player,1 Global playerpiv=CreateSphere(16,player) ScaleMesh playerpiv,.3,.3,.3 PositionEntity playerpiv,0,3,0 EntityAlpha playerpiv,0.5 PositionEntity player,0,-30,120 ;Global cam2=CreateCamera() ;PositionEntity cam2,0,20,-20 ;PointEntity cam2,player takt=CreateTimer(60) light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\level1.b3d") ScaleEntity scene,2,2,2 PositionEntity scene, 0, 0, 0 EntityType scene,C_CC EntityPickMode scene,2 tree=CreateCube() PositionEntity tree,0,0,-18 ScaleEntity tree,3,4,3 EntityPickMode tree,2 ;den max. abstand der kamera zum spieler definieren Const camradius=20 ;abstand der kamera vom spieler in horinzontaler und vertikaler richtung Global relXcam#,relYcam# ;----------------------------------------------------------------------------; While Not KeyHit(1) If KeyDown(hoch) MoveEntity player,0,0,0.3 If KeyDown(runter) MoveEntity player,0,0,-0.3 If KeyDown(links) MoveEntity player,-0.3,0,0 If KeyDown(rechts) MoveEntity player,0.3,0,0 winkel#=winkel-MouseXSpeed()/2. winkel2#=winkel2+MouseYSpeed()/3. If winkel2>-20 Then winkel2=-20 EndIf If winkel2<-80 Then winkel2=-80 EndIf relXcam=Sin(winkel2)*camradius relYcam=Cos(winkel2)*camradius RotateEntity player,0,winkel,0 LinePick EntityX(playerpiv,1),EntityY(playerpiv,1),EntityZ(playerpiv,1),relXcam*Sin(-winkel),relYcam,relXcam*Cos(-winkel),0 EntityType cam,0 PositionEntity cam,PickedX(),PickedY(),PickedZ(),1 DebugLog PickedX()+";"+PickedY()+";"+PickedZ() EntityType cam,C_CAM If PickedEntity()=0 Then EntityParent cam,playerpiv PositionEntity cam,0,relYcam,relXcam,0 EntityParent cam,0 EndIf PointEntity cam,playerpiv MoveMouse 512,384 UpdateWorld RenderWorld Flip 0 WaitTimer takt Wend End ;----------------------------------------------------------------------------; probiers mal aus und wenn was noch nicht klappt wies sollte meld dich ich hab übrigens noch ein paar dinge leicht verändert, inkl. variablennamen, damit die (mich) weniger verwirren. |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow, also das...ist...perfekt ![]() Aber eine Sache ist noch offen. Und zwar geht jetzt diese Funktion nicht mehr, dass die Kamera so an den Player ran kommt (nach oben schauen), wenn ich in Richtung Boden steuere. Ich weiß nicht, ob man das noch einbauen kann, vielleicht kann ich es auch selber, aber du kannst mir ja einen Ansatz geben ![]() Dann habe ich das ganze mal getestet, das erste Mal ist die Kamera irgendwie wild irgendwo hängen geblieben und war unkontrollierbar, die anderen Male ging es wunderbar. Vielen dank! ![]() |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
oha, die hatt ich wohl übersehen. was machmer da...
öhm mein ansatz jetzt währe Code: [AUSKLAPPEN] Const camradiusx=10
Const camradiusy=20 anstatt nur einem kamera-radius zu machen. danach nimmste den einen für die berechnung von relxcam und den anderen für relycam... |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, ich habe es geschafft ![]() Jetzt habe ich nur noch ein Problem, dann gebe ich (erstmal) Ruhe. Und zwar kommt die Kamera immer noch durch die Wände durch. D.h. sie kommt nicht durch, aber man kann durch sie durch sehen.Stell dich mal an die Wand und drehe die Kamera an der Wand vorbei, sodass sie kollidiert. Es wird folgendes zusehen sein: Mit Entityradius oder LinePick Radius größer machen hat's nicht geklappt. Weißt du, wie man das ganze beheben könnte? Hier ist jetzt mein neuer Code: Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 2
SetBuffer BackBuffer() Const links = 30 Const rechts = 32 Const hoch = 17 Const runter = 31 Const C_CAM=1 Const C_CC=2 Collisions C_CAM,C_CC,2,3 Global cam=CreateCamera() EntityType cam,C_CAM Global player=CreateCube() EntityRadius player,1.8 EntityType player,1 Global playerpiv=CreateSphere(16,player) ScaleMesh playerpiv,.3,.3,.3 PositionEntity playerpiv,0,3,0 EntityAlpha playerpiv,0.5 PositionEntity player,0,-30,120 ;Global cam2=CreateCamera() ;PositionEntity cam2,0,20,-20 ;PointEntity cam2,player takt=CreateTimer(60) light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\level1.b3d") ScaleEntity scene,2,2,2 PositionEntity scene, 0, 0, 0 EntityType scene,C_CC EntityPickMode scene,2 tree=CreateCube() PositionEntity tree,0,0,-18 ScaleEntity tree,3,4,3 EntityPickMode tree,2 ;den max. abstand der kamera zum spieler definieren Global camradiusX#=20 Global camradiusY#=20 ;abstand der kamera vom spieler in horinzontaler und vertikaler richtung Global relXcam#,relYcam# ;FPS Global FPS#=0 Global FPSZahl#=0 Global timer#=0 ;----------------------------------------------------------------------------; While Not KeyHit(1) If KeyDown(hoch) MoveEntity player,0,0,0.3 If KeyDown(runter) MoveEntity player,0,0,-0.3 If KeyDown(links) MoveEntity player,-0.3,0,0 If KeyDown(rechts) MoveEntity player,0.3,0,0 winkel#=winkel-MouseXSpeed()/2. winkel2#=winkel2+MouseYSpeed()/3. If winkel2>-20 Then winkel2=-20 EndIf If winkel2<-150 Then winkel2=-150 EndIf relXcam=Sin(winkel2)*camradiusX relYcam=Cos(winkel2)*camradiusY RotateEntity player,0,winkel,0 LinePick EntityX(playerpiv,1),EntityY(playerpiv,1),EntityZ(playerpiv,1),relXcam*Sin(-winkel),relYcam,relXcam*Cos(-winkel),0 EntityType cam,0 PositionEntity cam,PickedX(),PickedY(),PickedZ(),1 DebugLog PickedX()+";"+PickedY()+";"+PickedZ() EntityType cam,C_CAM If PickedEntity()=0 Then EntityParent cam,playerpiv PositionEntity cam,0,relYcam,relXcam,0 EntityParent cam,0 EndIf PointEntity cam,playerpiv MoveMouse 512,384 UpdateWorld RenderWorld ;DEBUG FPS() Text 0,0,"FPS: "+Int(FPS) Text 0,20,"Abstand der Kamera zum Player: "+Int(EntityDistance(cam,player)) Text 0,40,"EntityX(cam): "+Int(EntityX(cam))+" | EntityY(cam): "+Int(EntityY(cam))+" | EntityZ(cam): "+Int(EntityZ(cam)) Text 0,60,"EntityX(player): "+Int(EntityX(player))+" | EntityY(player): "+Int(EntityY(player))+" | EntityZ(player): "+Int(EntityZ(player)) Text 0,80,"Y Winkel: "+winkel2 ;------- Flip 0 WaitTimer takt Wend End ;----------------------------------------------------------------------------; Function FPS() FPSZahl=FPSZahl+1 If MilliSecs()-timer >= 1000 Then timer = MilliSecs() FPS=FPSZahl FPSZahl=0 EndIf End Function |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo is klar, entityradius hat ja nix mit linepick zu tun und der radius des linepicks verwandelt den pick-"strahl" zwar in eine art "röhre" aber das ändert auch nix
ich würde, nach dem pointentity cam,playerpiv dings, die kamera ein bissle richtung pivot bewegen, das sollte genügen edit: also per moveentity |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, das hat allerdings nur teilweise geholfen. Durch den Boden geht es jetzt gar nicht mehr, aber durch die Wand immer noch zum Teil. Und da ist es egal, um wieviele Einheiten ich die nach vorne verschiebe (habe es ausprobiert), das Problem bleibt, da das wahrscheinlich die natürliche Schrägstellung der Kamera verursacht. Ich hoffe, du weißt, was ich meine ![]() |
||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, hast recht ist wohl nicht so ne geschickte lösung. öhm...
edit: so, jetzt klappt auch das. ich hab auch rausgefunden warums bei dir mal die cam verklemmt hat, es hatte in meinem code noch entitytype cam,c_cam drin am anfang ich hab jetzt im prinzip die kollision wieder reingetan und dann angewendet wenn die kamera vom pivot nach hinten positioniert wird, dorthin wo der linepick getroffen hat... Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 2
SetBuffer BackBuffer() Const links = 30 Const rechts = 32 Const hoch = 17 Const runter = 31 Const C_CAM=1 Const C_CC=2 Collisions C_CAM,C_CC,2,3 Global cam=CreateCamera() EntityRadius cam,1 Global player=CreateCube() EntityRadius player,1.8 EntityType player,1 Global playerpiv=CreateSphere(16,player) ScaleMesh playerpiv,.3,.3,.3 PositionEntity playerpiv,0,3,0 EntityAlpha playerpiv,0.5 PositionEntity player,0,-30,120 ;Global cam2=CreateCamera() ;PositionEntity cam2,0,20,-20 ;PointEntity cam2,player takt=CreateTimer(60) light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\level1.b3d") ScaleEntity scene,2,2,2 PositionEntity scene, 0, 0, 0 EntityType scene,C_CC EntityPickMode scene,2 tree=CreateCube() PositionEntity tree,0,0,-18 ScaleEntity tree,3,4,3 EntityPickMode tree,2 ;den max. abstand der kamera zum spieler definieren Global camradiusX#=20 Global camradiusY#=20 ;abstand der kamera vom spieler in horinzontaler und vertikaler richtung Global relXcam#,relYcam# ;FPS Global FPS#=0 Global FPSZahl#=0 Global timer#=0 ;----------------------------------------------------------------------------; While Not KeyHit(1) If KeyDown(hoch) MoveEntity player,0,0,0.3 If KeyDown(runter) MoveEntity player,0,0,-0.3 If KeyDown(links) MoveEntity player,-0.3,0,0 If KeyDown(rechts) MoveEntity player,0.3,0,0 winkel#=winkel-MouseXSpeed()/2. winkel2#=winkel2+MouseYSpeed()/3. If winkel2>-20 Then winkel2=-20 EndIf If winkel2<-150 Then winkel2=-150 EndIf relXcam=Sin(winkel2)*camradiusX relYcam=Cos(winkel2)*camradiusY RotateEntity player,0,winkel,0 EntityType cam,0 PositionEntity cam,EntityX(playerpiv,1),EntityY(playerpiv,1),EntityZ(playerpiv,1) EntityType cam,C_CAM LinePick EntityX(playerpiv,1),EntityY(playerpiv,1),EntityZ(playerpiv,1),relXcam*Sin(-winkel),relYcam,relXcam*Cos(-winkel),0 If PickedEntity()<>0 Then PositionEntity cam,PickedX(),PickedY(),PickedZ(),1 Else EntityParent cam,playerpiv PositionEntity cam,0,relYcam,relXcam,0 EntityParent cam,0 EndIf PointEntity cam,playerpiv MoveMouse 512,384 UpdateWorld RenderWorld ;DEBUG FPS() Text 0,0,"FPS: "+Int(FPS) Text 0,20,"Abstand der Kamera zum Player: "+Int(EntityDistance(cam,player)) Text 0,40,"EntityX(cam): "+Int(EntityX(cam))+" | EntityY(cam): "+Int(EntityY(cam))+" | EntityZ(cam): "+Int(EntityZ(cam)) Text 0,60,"EntityX(player): "+Int(EntityX(player))+" | EntityY(player): "+Int(EntityY(player))+" | EntityZ(player): "+Int(EntityZ(player)) Text 0,80,"Y Winkel: "+winkel2 ;------- Flip 0 WaitTimer takt Wend End ;----------------------------------------------------------------------------; Function FPS() FPSZahl=FPSZahl+1 If MilliSecs()-timer >= 1000 Then timer = MilliSecs() FPS=FPSZahl FPSZahl=0 EndIf End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group