Kollision
Übersicht

![]() |
Flori-DBetreff: Kollision |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi.Ich weiß echt nicht wie ich in 3D ne Kollision amchen soll.Hab schn in derOnline-Hilfe geschaut aber irgendwie hab ichs nicht gerafft.
Kann mir bitte mal wer einen Beispiecode schreiben,wo wenn geht 2 Objekt kollidieren und durch die Kolli auf einem Punkt stehenbleiben? Wäre sehr nett bin echt schon am verzweifeln. |
||
BB is Macht!
Homepage: www.flori-d.de |
Roseman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm, ist eigentlich in der Onlinehilfe gut erklärt.
Guck da mal bei dem Befehl "Collisions". Hab hier mal das Codebeispiel von dem Befehl ein klein wenig verändert und kommentiert: Code: [AUSKLAPPEN] Graphics3D 640,480 SetBuffer BackBuffer() Global kugel=1, wuerfel=2 camera=CreateCamera() ;Kamera erschaffen RotateEntity camera,45,0,0 PositionEntity camera,0,15,-10 light=CreateLight() ;Licht erschaffen RotateEntity light,45,0,0 sphere=CreateSphere(32) ;Kugel erschaffen EntityType sphere,kugel ;Kollisionstyp der Kugel auf kugel setzen EntityRadius sphere,1 ;Den Kollisionsradius der Kugel setzen PositionEntity sphere,-3,0,0 ;Kugel links auf dem Bildschirm positionieren cube=CreateCube() ;Würfel erschaffen EntityType cube,wuerfel ;Kollisionstyp des Würfels auf wuerfel setzen EntityColor cube,0,100,0 PositionEntity cube,3,0,0 ;Würfel nach rechts Collisions kugel,wuerfel,2,1 ;Kollisionsaktivierung zwischen allen Objekten des Typs "kugel" und "wuerfel" ;Prüfung auf Kugel-Polygon ;Wenn Kollision, dann stoppe Objekte des Typs "kugel" While Not KeyDown(1) x#=0 ; x-Beschleunigung der Kugel reseten If KeyDown(203)=1 Then x#=-0.1 ; wenn Pfeiltaste links, dann x-Beschleunigung=-0.1 If KeyDown(205)=1 Then x#=0.1 ; wenn Pfeiltaste rechts, dann x-Beschleunigung=0.1 MoveEntity sphere,x#,0,0 ;Kugel mit x-Beschleunigung bewegen UpdateWorld RenderWorld If EntityCollided(sphere,wuerfel) Then Text 0,0,"Kollision!" ; Wenn die Kugel mit dem Würfel kollidiert, dann zeige den Text Flip Wend End Du kannst die Kugel mit den Pfeiltasten links/rechts bewegen, wenn die Kugel auf den Würfel trifft, dann wird der Text ausgegeben und die Kugel stoppt. Ist aber wie gesagt nichts anderes als das Beispiel bei "Collisions". Hoffe es hilft dir. |
||
![]() |
Flori-D |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verdammt ich krieg damit noch ne Macke,wieso muss es in 3D so kompliziert sein?In 2D wars so schön leicht.Hmm wenn ich versuche zu übertragen gehts trotzdem schief.
Also ich weiß soweit das: Code: [AUSKLAPPEN] Collisions image,image2
die Kollision aktiviert.Wqs mich stört ist das man anscheinend erst für jedes Objekt einen Kollisions-Typ setzen muss. |
||
BB is Macht!
Homepage: www.flori-d.de |
Roseman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jepp,
du mußt jedes Objekt einer Objektgruppe zuordnen, und das machst du mit EntityType. Wenn du also ne Stadt hast und nen Spieler, so ordnest du alle Häuser dem Objekttyp "haus" zu (z.B. haus=1) und brauchst somit nur die Kollision zwischen dem Spieler und dem Objekttyp haus zu definieren. Sonst müßtest du ja bei jedem Haus einzeln per Hand die Kollision überprüfen. Achja, dein Beispiel "Collisions image,image2" ist etwas unglücklich ausgedrückt, aber ich denke du weißt, daß du mit Collisions nur Meshobjekte (also 3D-Objekte) auf Kollision prüfst und nicht Bilder? |
||
![]() |
Flori-D |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja,weiß ich also nochmal zusammengefaßt obich gepeilt habe:
Zitat: Ich erstelle für jede Kollision einen Typ z.b so:
Global kegel = 1 Global würfel =2 dann ordne ich mein erstelltes Objekt mit Entitytype zu einem der beiden Gruppen zu. dann mache ich: Collisions kegel,würfel und weiter unten noch die das was passieren soll: If EntityCollide(kegel,würfel) Then Text"Hallo ich habs gepeilt". So richtig? |
||
BB is Macht!
Homepage: www.flori-d.de |
Roseman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Fast! ![]() Also du gibst eigentlich schon mit Collisions an was bei einer Kollision passiert. Der ganze Befehl lautet ja Collisions kugel, wuerfel,2,1. Damit sagst du Blitzbasic, dass eine Kollision von allen Objekten des Typs kugel mit allen Objekten des Typs wuerfel überprüft werden soll. Der nächste Parameter (die 2) gibt an wie die Kollision geprüft werden soll (Kugel-Kugel Kollision, Kugel-Polygon Kollsion, Kugel-Würfel Kollision). Es ist also immer besser mit EntityRadius oder EntityBox eine unsichtbare "Kollisionsoberfläche" für ein Objekt zu erstellen, da dann geprüft wird, ob diese Oberflächen sich berühren (ausser bei Kugel-Polygon Kollision). Der letzte Parameter bei Collisions sagt BlitzBasic eigentlich schon, was bei einer Kollision der beiden Typen mit dem ersten Typ geschen soll: 1=stoppen 2=sliden 3=raufsliden Das heißt im Klartext, dass dies schon immer vorgegeben wird. Mit EntityCollided kannst du dann noch weitere Dinge "manuell" vorgeben, die bei einer Kollision passieren sollen. Beispiel: Ne Kugel trifft nen Gegner. Die Kugel wird dank Collisions angehalten. Du fragst ab: If EntityCollided(kugel,gegnertyp) Then ... Hier kannst du dann hinschreiben, dass die Kugel gelöscht werden soll, und dem Gegener Energie abgezogen wird etc. |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie Roseman schon in Beispiel drinne hat das UpdateWorld nicht vergessen . | ||
![]() |
Flori-D |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gut ich glaube ich habs dann geschnallt.Ich setze einfach noch hinter das
Code: [AUSKLAPPEN] Collisions, bla,bla
eine Code: [AUSKLAPPEN] ,1,2
Ah ![]() |
||
BB is Macht!
Homepage: www.flori-d.de |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und Collisionen gehen nur von bewegten Objekten aus ... | ||
![]() |
Flori-D |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und bei unbeweglichen Objekten mache ich dann
Code: [AUSKLAPPEN] CollisionX oder
Code: [AUSKLAPPEN] CollisionsY
richtig? |
||
BB is Macht!
Homepage: www.flori-d.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group