[b3d] Keine Collosion für die Camera

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

BananaSalat

Betreff: [b3d] Keine Collosion für die Camera

BeitragFr, Jul 28, 2006 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Also hallo erstmal Smile

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. Wink

FreetimeCoder

BeitragSa, Jul 29, 2006 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jul 29, 2006 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy Hey super, genau das was ich gesucht hab.

Großes dankeschön Wink

Edit:

Habs mir nochmal angeschaut, .... und bin überwälltigt XD hätt nicht gedacht das man so ne geile cam machen kann.

Nochmals danke Wink

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 Wink

FreetimeCoder

BeitragMi, Aug 02, 2006 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 03, 2006 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Boar das ist ja kompliziert Wink

Trotzdem vielen dank Wink

FreetimeCoder

BeitragDo, Aug 03, 2006 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Benutz es einfach. Wink
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group