Problem mit "Kamera Kollisionsabfrage"
Übersicht

DennYBetreff: Problem mit "Kamera Kollisionsabfrage" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Leute,
ich habe erneut ein Problem! ![]() Also ich ein kleines Programm geschrieben in dem man eine Kugel steuert. Die Kollisionsabfrage der Kugel funktioniert auch ganz Prima. Aber wenn man mit der Kamera gegen eine Wand "klatscht" so bleibt diese nicht stehen, sondern ich bin plötzlich hinter der Wand. Das Problem habe ich damit gelöst indem ich einfach eine Kollisionsabfrage mit der Kamera und dem Objekt gemacht habe. Das hat aber den Nachteil, das die Kamera sich , bei einer Kollision, von der Kugel "wegdreht". Hier der code: Code: [AUSKLAPPEN] Graphics3D 800,600,16,2
SetBuffer BackBuffer() ; setzen der Kollisionstypen type_character=1 type_objekte=2 type_camera=3 ;--------LICHT_-------- AmbientLight 255, 255, 255 ;-----------die kugel die man bewegt----------- spieler=CreateSphere(10 ) EntityRadius spieler,0.5 ;-----der Radius der Kugel (hängt mit Kollisionsabfrage zusammen) EntityType spieler,type_character ; dieser Typ eben ............... ;PositionEntity sphere,0,10,0 ;startposition ScaleEntity spieler,0.5,0.5,0.5 ; Die map cube= CreateCube() EntityRadius cube,1 EntityType cube,type_objekte PositionEntity cube,0,-12,0 EntityColor cube,127,0,0 ScaleEntity cube,10,10,10 cube2= CreateCube() EntityRadius cube2,1 EntityType cube2,type_objekte PositionEntity cube2,0,0,5 EntityColor cube2,127,127,0 ScaleEntity cube2,2,2,2 ;-----------------------------------------Kamera!--------------- Global camera=CreateCamera(spieler) PositionEntity camera, 0, 5, -10 RotateEntity camera,20,0,0 EntityType camera,type_camera ;----------------------------------- Repeat x#=0 y#=0 z#=0 ;--------------------------Bewegung-------------------- If KeyDown( 203 )=True Then TurnEntity spieler, 0, 1, 0 ; "LINKS" (im Raum drehen) If KeyDown( 205 )=True Then TurnEntity spieler, 0, -1, 0 ; "Rechts" (im Raum drehen) If KeyDown( 208 )=True Then z#=-0.1 ; "RUNTER (zurück)" If KeyDown( 200 )=True Then z#=0.1 ; "HOCH (vor)" MoveEntity spieler,x#,y#,z# MoveEntity spieler,0,-0.1,0 ;------------------------------------------------------------------------ ; Aktivieren der kollisionsabfrage zwischen Charakter/kamera und umwelt! Collisions type_character,type_objekte,2,2 Collisions type_camera,type_objekte,2,2 UpdateWorld RenderWorld Text 0,0,"Verwende die Pfeiltasten um die Spielfigur (die weiße Kugel) zu bewegen!" Flip Until KeyHit(1) End Ich will aber, dass die Kamera wenn man an der Wand entlangschrammt, zum Spieler heranzommt, soweit wie es eben notwendig ist, und danach wieder wegzoomt, wenn "sie wieder Platz hat" 1. Geht das überhaupt? 2. Wie ist das realisierbar? Danke für eure Antworten! ![]() |
||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
prüf doch ob sich die camera einen bestimmten Wert hinter der Kugel befindet. Wenn nicht musst du sie halt
Moveentity korrigieren. Nimm auf keinen Fall Positionentity, denn dann würdest du auch hinter die Wand springen!!! |
||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
![]() |
Foppele |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich gaube da gibt's keine einfache Lösung, sonst würde es nicht so viele professionelle Spiele geben wo die Kamera mal in der Wand verschwindet oder andere blöde Positionen einnimmt.
Mit LinePick kann man immer gut testen ob irgendwas im Weg ist, drumherummanövrieren wird schwierig ohne Vektorberechnungen durchzuführen. |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pointentity.
Richtet ein Objekt auf ein anderes aus. |
||
![]() |
Foppele |
![]() Antworten mit Zitat ![]() |
---|---|---|
Trotzdem geht der Würfel hinter der Wand lang. | ||
DennYBetreff: Ich habs gepackt! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
Durch eure Gedankenanstöße bin ich letztendlich zu einer brauchbaren Lösung gekommern! Vielen Dank Jungs ![]() ![]() ![]() Ich poste einfach mal den Code meines verbesserten Programms, vielleicht nützt es irgendjemanden etwas. Code: [AUSKLAPPEN] Graphics3D 800,600,16,2
SetBuffer BackBuffer() ; setzen der Kollisionstypen type_character=1 type_objekte=2 type_camera=3 ;--------------Variablen zur Positionierung der kamera----------------- dx#=0.0 dy#=0.0 dz#=0.0 ;--------LICHT_-------- AmbientLight 255, 255, 255 ;-----------die kugel die man bewegt----------- spieler=CreatePivot() PositionEntity spieler,0,0,0 EntityType spieler,type_character EntityRadius spieler,1 ResetEntity spieler model=CreateSphere() EntityParent model,spieler ;--------------- Die map---------- cube= CreateCube() EntityRadius cube,1 EntityType cube,type_objekte PositionEntity cube,0,-15,0 EntityColor cube,127,0,0 ScaleEntity cube,10,10,10 cube2= CreateCube() EntityRadius cube2,1 EntityType cube2,type_objekte PositionEntity cube2,0,-3,5 EntityColor cube2,127,127,0 ScaleEntity cube2,2,2,2 ;-----------------------------------------Kamera!--------------- camera=CreateCamera() target=CreatePivot( spieler ) PositionEntity target,0,3,-5 EntityType target,type_camera heading=CreatePivot( spieler ) PositionEntity heading,0,0,20 ;-----------------------Kollisionsabfrage---------------------------- Collisions type_character,type_objekte,2,2 Collisions type_camera,type_objekte,2,2 ;----------------------------------- PositionEntity spieler,0,10,0 ;--------------------Hauptschleife: Repeat ;--------------------------Bewegung-------------------- If KeyDown( 203 )=True Then TurnEntity spieler, 0, 1, 0 ; "LINKS" (im Raum drehen) If KeyDown( 205 )=True Then TurnEntity spieler, 0, -1, 0 ; "Rechts" (im Raum drehen) If KeyDown(30) ;vor MoveEntity spieler,0,0,0.1 Else If KeyDown(44) ;zurück MoveEntity spieler,0,0,-0.1 EndIf ;---------------Schwerkraft--------------------------------------------- MoveEntity spieler,0,-0.1,0 ;------------------------------------------------------------------------ ;----------------Das auf und Ab der Kamera If KeyDown(200) ;"oben" ----> weiter nach vorn-unten schwenken TranslateEntity heading,0,-0.1,0 Else If KeyDown(208) ;"unten ------> zurück schwenken TranslateEntity heading,0,+0.1,0 EndIf ;------------------ ;------Die Kamera steht hinter dem Objekt, sie dreht sich immer so wie "Target" und schaut immer auf ;------"Heading" dx=EntityX(target,True)-EntityX(camera,True) dy=EntityY(target,True)-EntityY(camera,True) dz=EntityZ(target,True)-EntityZ(camera,True) TranslateEntity camera,dx*.1,dy*.1,dz*.1 PointEntity camera,heading PositionEntity target,0,0,0 ResetEntity target PositionEntity target,0,3,-10 ;---------------------------------------------------- UpdateWorld RenderWorld Text 0,0,"Verwende 'A/Y' und 'Links/Rechts' um die Spielfigur (die weiße Kugel) zu bewegen!" Text 0,10,"Beachte: Die Kamera zoomt an dedn Spieler heran wenn nicht genug Platz ist! Flip Until KeyHit(1) End Ich habe es schön beschriftet damit auch jeder durchsieht. |
||
HoneschBetreff: gut |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gute Lösung ![]() Honesch |
||
Das Leben ist wie ein Computerspiel. Scheiß Handlung aber geile Grafik ! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group