Kollision

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Flori-D

Betreff: Kollision

BeitragMo, Mai 17, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Fast! Wink
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

BeitragMo, Mai 17, 2004 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie Roseman schon in Beispiel drinne hat das UpdateWorld nicht vergessen .

Flori-D

BeitragMo, Mai 17, 2004 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut ich glaube ich habs dann geschnallt.Ich setze einfach noch hinter das
Code: [AUSKLAPPEN]
Collisions, bla,bla


eine Code: [AUSKLAPPEN]
,1,2

Ah Idea
BB is Macht!

Homepage: www.flori-d.de

Markus2

BeitragDi, Mai 18, 2004 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Und Collisionen gehen nur von bewegten Objekten aus ...

Flori-D

BeitragDo, Mai 20, 2004 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Und bei unbeweglichen Objekten mache ich dann
Code: [AUSKLAPPEN]
CollisionX
oder
Code: [AUSKLAPPEN]
CollisionsY


richtig?
BB is Macht!

Homepage: www.flori-d.de

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group