[b3d] Keine Collosion für die Camera
Übersicht

![]() |
BananaSalatBetreff: [b3d] Keine Collosion für die Camera |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also hallo erstmal ![]() Ich bin dabei ein Rpg zu programmiern .... zumindest versuche ich es. Nun habe ich folgendes Problem: Ich habe einen pivot der als player fungiert, welcher an meinem level kolliedert. Dieser pivot is des Parent für meine Camera, die kammera folgt ihm also immer "3dpersonview". Nun Colliedert die camera immer mit meinem Level und wird von einem hausdach z.b. nach oben geschoben. So meine Frage ist nun: Wie lass ich die Camera nicht kollidiern. Noch schöner wärs zwar wenn sie collidiern würde und dann nacher wieder in ursprüngliche position zurück springen würde aber das ist denke ich ne menge mehr aufwand. Danke schon im Voraus. ![]() |
||
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du willst, dass die Kamera dem Spieler folgt, aber kein Child vom Spieler ist, versuch das:
Code: [AUSKLAPPEN] Graphics3D 640,480,0,2 Setbuffer Backbuffer() Player=createCube() PlayerCameraPos=createpivot(Player) Positionentity PlayerCameraPos,0,4,-3,0 Camera=Createcamera() While not keyhit(1) X#=entityX(PlayerCameraPos,1)-entityX(Camera,1) Y#=entityY(PlayerCameraPos,1)-entityY(Camera,1) Z#=entityZ(PlayerCameraPos,1)-entityZ(Camera,1) Translateentity Camera,X*0.1,Y*0.1,Z*0.1 pointentity Camera,Player If KeyDown(57) MoveEntity Player,0,0,0.4 EndIf Updateworld renderworld flip wend end Jetzt kannst du auch der Kamera und dem Spieler unterschieldiche Kollisionsarten zuweisen. edit: Wenn die Kamera mit anderen Objekten kollidiert ist, kehrt sie danach wieder zu ihrer Position hinter dem Spieler zurück. |
||
![]() |
BananaSalat |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Großes dankeschön ![]() Edit: Habs mir nochmal angeschaut, .... und bin überwälltigt XD hätt nicht gedacht das man so ne geile cam machen kann. Nochmals danke ![]() Bloß eine erkärung zu diesem teil X#=entityX(PlayerCameraPos,1)-entityX(Camera,1) Y#=entityY(PlayerCameraPos,1)-entityY(Camera,1) Z#=entityZ(PlayerCameraPos,1)-entityZ(Camera,1) Translateentity Camera,X*0.1,Y*0.1,Z*0.1 Währe seeehhrr nett ![]() |
||
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erklärung zu:
Code: [AUSKLAPPEN] X#=entityX(PlayerCameraPos,1)-entityX(Camera,1) Vom X-wert von PlayerCameraPos wird der X-wert der Kamera abgezogen. Die 1 steht für den globalen Wert vom abgefragten Entity. Durch die Subtraktion wird die Entfernung von Spieler und Kamera bzw. die Differenz ermittelt. Wenn man nun diese Differenz mit "TranslateEntity" in eine Geschwindigkeit umwandelt, wird die Kamera um diese Differenz bewegt. Das "X*0.1" verkleinert die Differenz so, dass die Kamera nicht mit einem Mal am Spieler ist, sondern sich nur um Differenz*0.1 dem Spieler nähert. Wenn man nun "X*0.01" schreibt ist die Kamera langsamer. Mit Y und Z ist es das gleiche. Alles zusammen gibt dann einen schönen Gleiteffeckt. X, Y und Z müssen nicht umbedingt Float-Variablen sein, aber der Gleiteffeckt ist dann sauberer. |
||
![]() |
BananaSalat |
![]() Antworten mit Zitat ![]() |
---|---|---|
Boar das ist ja kompliziert ![]() Trotzdem vielen dank ![]() |
||
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Benutz es einfach. ![]() Du kannst natürlich auch eine Function draus machen: Code: [AUSKLAPPEN] Function MoveCamera(Pivot,Camera,Ziel) X#=EntityX(Pivot,1)-EntityX(Camera,1) Y#=EntityY(Pivot,1)-EntityY(Camera,1) Z#=EntityZ(Pivot,1)-EntityZ(Camera,1) TranslateEntity Camera,X*0.1,Y*0.1,Z*0.1 PointEntity Camera,Ziel End Function Dann kannst du jedes belibiege Objekt jedem anderen hinterher schicken und musst nicht so viel schreiben. Dann wird der Code auch übersichtlicher. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group