Collision geht nicht bitte helft!!!!!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Mr.X

Betreff: Collision geht nicht bitte helft!!!!!

BeitragSa, Feb 24, 2007 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo weis jemand wiso ich keine collision bekomme.

Code: [AUSKLAPPEN]

Graphics3D 1024,768 
SetBuffer BackBuffer() 


camera=CreateCamera() 
PositionEntity camera,0,1,-5

boden=CreatePlane()
EntityType boden,1

plane=LoadMesh("E:\Modelle\cssna140.3ds") 
EntityType Plane,2 
EntityRadius plane,1


Collisions 1,2,2,2     
While Not KeyHit (1) 
   
   If KeyDown(30) TurnEntity plane,-2,0,0 
   If KeyDown(44) TurnEntity plane,+2,0,0 
   If KeyDown(203) TurnEntity plane,0,2,0 
   If KeyDown(205) TurnEntity plane,0,-2,0 
   col=CountCollisions(plane)
  FOR i=1 TO col
      Text 000,i*20,"Entity="+CollisionEntity(plane,i)
  Next
  UpdateWorld 
   RenderWorld 
   Flip
Wend     
   
   
 


End


Wäre echt dankbar.
  • Zuletzt bearbeitet von Mr.X am Sa, Feb 24, 2007 23:09, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 24, 2007 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
TypeQ ist das was sich auf TypeZ bewegt, um eine Kollision hervor zu rufen. Bei dir ist es anders rum. Tausche mal die EntityType -Werte.
 

Mr.X

BeitragSa, Feb 24, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Meitest du EntityType boden,1 werte tauschen geht aber auch nicht.

Hat keiner mehr ideen.
(Schuldigung meintest "Collisions" geht aber auch nicht)

oder kann mir jemand sagen wie ich leicht eine collision zwischen zwei
Entity`s prüfen kann

Ein Plane Entity
Und ein Mesh
Danke schonmal.
  • Zuletzt bearbeitet von Mr.X am Sa, Feb 24, 2007 23:27, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 24, 2007 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei dir hat 'plane' - also das geladene Mesh - nur ein EntityRadius, dadurch bewegt sich nichts bei TurnEntity, womit eine Kollision hervor gerufen werden kann. Dringende Bitten werden sicherlich nicht eher beantowortet. Nur mal so nebenbei...
 

Mr.X

BeitragSa, Feb 24, 2007 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was muss ich machen damit es functioniert?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 25, 2007 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau mal, du hast eine Kugel (EntityRadius) definiert:
Code: [AUSKLAPPEN]
plane=LoadMesh("E:\Modelle\cssna140.3ds")
EntityType Plane,2
EntityRadius plane,1

Wenn du nun die Kugel drehst (TurnEntity):
Code: [AUSKLAPPEN]
   If KeyDown(30) TurnEntity plane,-2,0,0
   If KeyDown(44) TurnEntity plane,+2,0,0
   If KeyDown(203) TurnEntity plane,0,2,0
   If KeyDown(205) TurnEntity plane,0,-2,0

Dann passiert nichts, da sich nichts zubewegend bewegt. Kollisionen gehen immer nur aus der Bewegung aus. Das bedeutet - anders als in 2D - das nach einer Kollision diese im nächstem Schleifendurchlauf nicht mehr kollidiert, ausser man bewegt selber wieder in Richtung des zu kollidierenden.

Was du nun machen musst, weiß ich nicht, da ich nicht weiß, was du genau erreichen willst. Aus deinem Code ist es mir noch nicht ersichtlich.

Nenne mir was du willst, und vielleicht kann ich dir dann helfen. Wink
 

Mr.X

BeitragSo, Feb 25, 2007 0:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke schonmal wollte ein flugzeug das mit der oberfläche collidiert
Bin auch schon weiter aber das flugzeug versinkt noch im boden
aber nicht mehr ganz.

versinkt nur noch bis zur mitte.

MeshWidth(Entity) <- keine richtigen angaben??
  • Zuletzt bearbeitet von Mr.X am So, Feb 25, 2007 0:33, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 25, 2007 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, es sollte wohl auch Cessna heissen und Plane=Flugzeug nicht Plane=Fläche ala CreatePlane (hat mich verwirrt). Du kannst in Blitz3D nur leider sehr schlecht Polygon zu Polygon Kollisions machen. Wenn überhaupt dann mit ql:MeshesIntersect was sehr langsam sein soll. Hab ich auch noch nie ausprobiert. Üblicher weise wird es so gemacht, dass man mit mehreren EntityRadien versucht im groben die Form eines Objekte nachzubilden und es so kollidieren zu lassen. Dazu ist das Parent/Child -Verhalten ganz Sinnvoll. Willst aber nur, das dein Flugzeug zerschellen kann ohne Landeanflug und realistischem Verhalten bei Bodenkontakt, so reicht auch nur ein EntityRadius.^^
 

Mr.X

BeitragSo, Feb 25, 2007 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab es schon mit entityRadius versucht geht aber ergentwie nicht
egal wie groß ich den umpfang mache Sad

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 25, 2007 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht hilft dir dein etwas modifizierter Code: [AUSKLAPPEN]
Graphics3D 1024,768,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,1,-5

light=CreateLight()
RotateEntity light,20,-20,0

boden=CreatePlane()
EntityType boden,2

plane=CreateSphere(8);Mesh("E:\Modelle\cssna140.3ds")
EntityType Plane,1
EntityRadius plane,1

Collisions 1,2,2,2
While Not KeyHit (1)
 If KeyDown(30) TurnEntity plane,-2,0,0
 If KeyDown(44) TurnEntity plane,+2,0,0
 If KeyDown(200) MoveEntity plane,0,.01,0
 If KeyDown(208) MoveEntity plane,0,-.01,0
 If KeyDown(203) TurnEntity plane,0,2,0
 If KeyDown(205) TurnEntity plane,0,-2,0
 col=CountCollisions(plane)
 UpdateWorld
 RenderWorld

 For i=1 To col
  Text 0,i*20,"Kollision";"Entity="+CollisionEntity(plane,i)
 Next
 Flip
Wend
End

Bewege mal erst mit Cursor hoch dann, wenn die Sphere komplett aus dem Boden raus ist, wieder zurück in den Boden mit Cursor runter...

StepTiger

BeitragSo, Feb 25, 2007 1:29
Antworten mit Zitat
Benutzer-Profile anzeigen
MeshWidth gibt die absolute Breite eines Entitys an.
Das bedeutet:
MeshWidth=[Vertex mit maximalem X Wert]-[Vertex mit minimalem X Wert]
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Mr.X

BeitragSo, Feb 25, 2007 1:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal für den code hat mir schon sehr geholfen.
dan hab ich aber nochmal ne frage wo für ist die angabe der X,Y,Z
Koordinate bei EntityBox man gibt doch entity an???
und die breite, höhe, tiefe???
Hab es so gemacht:
EntityBox plane, 0, 0, 0, MeshWidht(plane),meshheight(plane),Meshdepth(plane)

Collision erfolgt aber immer nen ganzes stück übern boden????
Was mache ich falsch

EntityBox plane, 0, 0, 0, 0, 0, 0
Und so bleibt es auch immer nen stück übern boden????????
Was soll das denn?????

StepTiger

BeitragSo, Feb 25, 2007 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, das ist witzig ^^

Du musst für ein Objekt, was als Collision_Source dient, immer eine Sphere angeben. Es gibt nur Sphere-to-box, Sphere-to-Sphere und Sphere-to-Polygon Kollision. Die Sphere hat also immer noch den Radius 1.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Mr.X

BeitragSo, Feb 25, 2007 2:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also kann ich EntityBox nicht nehmen???

Bin jetzt endlich bis auf 0.02 am boden Juhu Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group