kolision mit bodem (kamera)
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: kolision mit bodem (kamera) |
![]() Antworten mit Zitat ![]() |
---|---|---|
nochmal leider ein thema, habe nun versucht eine kolisionsabfrage einzubauen
aber irgendwie scheint es da schwirig zu werden, hier der code Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1
SetBuffer BackBuffer() camera = CreateCamera() PositionEntity camera, 256, 10, 256 RotateEntity camera, 45, 0, 0 light = CreateLight() RotateEntity light, 90, 0, 0 terrain = CreateTerrain(512) EntityPickMode terrain , 2 drum = LoadMesh("haus_000.3ds") grass_tex = LoadTexture("mossyground.bmp") EntityTexture terrain,grass_tex While Not KeyHit(1) Collisions 1, 2, 2, 2 RenderWorld mx = MouseX() my = MouseY() entity = CameraPick(camera, mx, my) RenderWorld If entity = 0 Then Text 0, 0, "Nicht ausgewählt" If entity<>0 Then Text 0, 0, "Ausgewählt:" + entity Text 0, 20, "X:" + PickedX() Text 0, 40, "Y:" + PickedY() Text 0, 60, "Z:" + PickedZ() If MouseDown(1) Then PositionEntity drum,PickedX(),.5,PickedZ() EndIf EndIf Oval mx - 5, my - 5, 10, 10, 1 ;######################################################################### ;# # ;# Am Bildschirmrand die Maus Bewegen # ;# # ;######################################################################### If MouseX()>-15 And MouseX()<1024 And MouseY()>-15 And MouseY()<15 Then MoveEntity camera, 0, +0.05, 0.05 If MouseX()>-15 And MouseX()<1024 And MouseY()>768-15 And MouseY()<768 Then MoveEntity camera, 0, -0.05, -0.05 If MouseX()>-15 And MouseX()<15 And MouseY()>-15 And MouseY()<768 Then MoveEntity camera, -0.05,0,0 If MouseX()>1024-15 And MouseX()<1024+15 And MouseY()>-15 And MouseY()<768 Then MoveEntity camera, +0.05,0,0 ;######################################################################### ;# # ;# Kamera hoch und runter # ;# # ;######################################################################### If KeyDown(200) = 1 Then MoveEntity camera, 0,.5, 0 If KeyDown(208) = 1 Then MoveEntity camera, 0, -.5,0 If KeyDown(205) = 1 Then TurnEntity camera, 0, 1, 1 If KeyDown(203) = 1 Then TurnEntity camera, 0, -1, -1 Flip Wend End nun die frage warum geht dort keine kolisionsabfrage, also im grunde soll die kamera nicht durch den boden gehen beim heranzoomen. wie kann ich das machen? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Nummern bei Collisions![]() ![]() Die Kamera braucht dann noch einen Kollisionsradius den du mit EntityRadius ![]() Warum 2x RenderWorld? Warum benutzt du die Variablen mx & my nicht? |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
außerdem fehlt UpdateWorld(). Erst damit werden Kollisionen entdeckt.
BlitzBasic: [AUSKLAPPEN] EntityType Camera,1 |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh das sieht schon recht gut aus, nur was is wenn es objekte sind, also mit linker maustaste setz ich ein haus ab, dieses steht im type , aber man kann diese häuser wie in einem malprogramm dennoch "übermalen" welche möglichkeit habe ich das ein objekt nicht in einem anderen gesetzt wird?
hier nochmal der code den ich bislang habe. falls die 3ds dateien benötigt werden, bitte sagen. Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1
Global objekt.objekt Type objekt Field x# Field y# Field z# Field haus End Type SetBuffer BackBuffer() camera = CreateCamera() PositionEntity camera, 512/2, 10, 512/2 RotateEntity camera, 45, 0, 0 EntityType Camera,1 light = CreateLight() RotateEntity light, 90, 0, 0 terrain = CreateTerrain(512) EntityPickMode terrain , 2 EntityType Terrain,2 drum = LoadMesh("media\haus_000.3ds") EntityPickMode drum , 2 EntityType drum , 2 ScaleMesh drum,.2,.2,.2 grass_tex = LoadTexture("media\grass_bright.jpg") EntityTexture terrain,grass_tex Collisions 1, 2, 2, 2 While Not KeyHit(1) TerrainShading terrain, 1 TerrainDetail Terrain, 45000,1 mx = MouseX() my = MouseY() entity = CameraPick(camera, mx, my) UpdateWorld RenderWorld Text 220, 0, "Linke Maustaste= Bauen" Text 220, 20, "Rechte Maustaste= Abreissen" Text 220, 40, "Pfeiltaste Hoch & Runter" Text 220, 60, "Maus an den Rand bewegen" Text 220, 80, "Pfeiltasten Links & Rechts" If entity = 0 Then Text 0, 0, "Nicht ausgewählt" If entity<>0 Then Text 0, 0, "Ausgewählt:" + entity Text 0, 20, "X:" + PickedX() Text 0, 40, "Y:" + PickedY() Text 0, 60, "Z:" + PickedZ() Text 0, 100, "Benutze Cursortasten..." Text 0, 120, "X Position: " + EntityX#(camera) Text 0, 140, "Y Position: " + EntityY#(camera) Text 0, 160, "Z Position: " + EntityZ#(camera) anzahl=0 For objekt.objekt= Each objekt anzahl=anzahl+1 Next Text 0, 200, "Anzahl: " + anzahl ;######################################################################### ;# # ;# Wenn man mit maustaste 2 draufklickt mesh löschen # ;# # ;######################################################################### For objekt.objekt= Each objekt If entity=objekt\haus Then EntityColor objekt\haus,0,255,0 CameraProject camera, EntityX(objekt\haus, 1), EntityY(objekt\haus, 1), EntityZ(objekt\haus, 1) Text ProjectedX(),ProjectedY(),"www" ;Das www soll übern haus angezeigt werden, If MouseHit(2) Then FreeEntity objekt\haus Delete objekt.objekt EndIf Else EntityColor objekt\haus,255,255,255 EndIf Next ;######################################################################### ;# # ;# neues gebäude hinzufügen # ;# # ;######################################################################### If MouseHit(1) Then objekt= New objekt objekt\x# = PickedX() objekt\y# = .5 objekt\z# = PickedZ() objekt\haus= LoadMesh("haus_000.3ds") EntityPickMode objekt\haus, 2 EntityType objekt\haus, 2 PositionEntity objekt\haus,PickedX(),.5,PickedZ() EndIf EndIf Oval mx - 5, my - 5, 10, 10, 1 ;######################################################################### ;# # ;# Am Bildschirmrand die Maus Bewegen # ;# # ;######################################################################### If MouseX()>-15 And MouseX()<1024 And MouseY()>-15 And MouseY()<15 Then MoveEntity camera, 0, +0.05, 0.05 If MouseX()>-15 And MouseX()<1024 And MouseY()>768-15 And MouseY()<768 Then MoveEntity camera, 0, -0.05, -0.05 If MouseX()>-15 And MouseX()<15 And MouseY()>-15 And MouseY()<768 Then MoveEntity camera, -0.05,0,0 If MouseX()>1024-15 And MouseX()<1024+15 And MouseY()>-15 And MouseY()<768 Then MoveEntity camera, +0.05,0,0 ;######################################################################### ;# # ;# Kamera hoch und runter # ;# # ;######################################################################### If KeyDown(200) = 1 Then MoveEntity camera, 0,.5, 0 If KeyDown(208) = 1 Then MoveEntity camera, 0, -.5,0 If KeyDown(203) = 1 Then TurnEntity camera, 0, 1, 1 If KeyDown(205) = 1 Then TurnEntity camera, 0, -1, -1 If EntityY(camera)<3 Then MoveEntity camera, 0,0.5, 0 If EntityY(camera)>30 Then MoveEntity camera, 0,-0.5, 0 If EntityX(camera)<0 Then MoveEntity camera, 0.05,0,0 If EntityX(camera)>512 Then PositionEntity camera, 512, EntityY#(camera), EntityZ#(camera) If EntityZ(camera)<0 Then PositionEntity camera, EntityX#(camera), EntityY#(camera), 0 If EntityZ(camera)>512 Then PositionEntity camera, EntityX#(camera), EntityY#(camera), 512 FlushMouse() Flip Wend End |
||
![]() |
Jo0oker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich richtig verstehe was du uns sagen willst, dann versuch es am besten mit Pick-Befehlen und nicht mit Kollisionen.
Schau dier mal CameraPick, PickedX, PickedY und PickedZ an. Du könntest die neuen Objekte dann anhand der Koordinaten von PickedXYZ einfach setzten. Wenn du etwas anderes meinst, dann beschreib noch einmal genauer dein Problem. Ach und es heißt Kollision mit Boden ![]() lg Jo0oker |
||
Tehadon, das kostenlose 3D RPG
www.tehadon.de http://www.blitzforum.de/worklogs/14/ Das Abenteuer wird beginnen! |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
mein problem is doch ganz einfach, ich setz mit linker maustaste ein objekt, und kann in diesem objekt noch eins ablegen, und genau das sollte nicht passieren, ich dachte das würde mit collision gehen, tuts nur leider nicht | ||
![]() |
Jo0oker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso kannst du dieses Problem nicht mit Pick lösen?
Wenn du etwas nicht übermalen willst, kannst du ja zuvor überprüfen, ob da bereits ein Haus oder etwas ähnliches ist. Dafür kannst du dir auch gleich den Befehl PickedEntity angucken.. lg Jo0oker |
||
Tehadon, das kostenlose 3D RPG
www.tehadon.de http://www.blitzforum.de/worklogs/14/ Das Abenteuer wird beginnen! |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
also mit der funktion pic, -> EntityPickMode objekt\haus, 2,0 <- sollte er das übermalen ja vermeiden aber es passiert doch noch zumindest so ca 30 pixel | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber du kannst doch unmittelbar nachdem das neue haus per maus gesetzt ist, dieses auf Collisionen testen lassen, und wenn da eine Kollision ist, dann verschiebst du das ding einfach noch solange, bis keine kollisionen mehr gemeldet werden. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group