Hilfe

Collisions

B3D

Aufruf

Collisions type_q%, type_z%, methode%, reaktion%

Parameter

type_q% Quell-Objekttyp, das auf Kollision überprüft werden soll
type_z% Ziel-Objekttyp, mit dem es kollidieren soll
methode% Methode der Erkennung:
1=Kugel-Kugel-Kollision
2=Kugel-Polygon-Kollision
3=Kugel-Würfel-Kollision
reaktion% Was soll bei einer Kollision passieren:
1=stoppen
2=sliden (normal)
3=sliden (nur raufsliden)


Rückgabewert

-


Beschreibung

Aktiviert die Kollision zwischen zwei verschiedenen Objekttypen.

EntityTypes sind einfache Nummern die mit EntityType gesetzt werden können. BlitzBasic benutzt diese EntityTypes dann um die Kollision eines Objekts mit anderen zu überprüfen.

BlitzBasic hat mehrere Möglichkeiten der Kollisionsprüfung, als nur das einfache Kennzeichnen der Objekte. Auch der Kollisionsradius spielt eine bedeutende Rolle. Der Radius kann mit EntityRadius gesetzt werden.

Wurde die Methode auf 1 gesetzt (Kugel-Kugel), dann muss dem Zielobjekt EntityRadius zugeteilt werden. Wird die Methode 3 benutzt (Kugel-Würfel), dann muss man EntityBox ausführen. Die 2 Methode (Kugel-Polygon) benötigt keine besondere Zuweisung.

Für den Fall, dass eine Kollision erkannt wurde, gibt es noch einen Parameter. Damit kann man die Reaktion des Objekts auf eine Kollision einstellen. Dadurch kann ein Objekt stoppen, sliden oder raufsliden.

Alle Reaktionen werden nur dann ausgeführt, wenn UpdateWorld ausgeführt wird.

Jedes Mal, wenn der Befehl Collisions ausgeführt wird, wird die Information zu einer Kollisionsliste hinzugefügt. Diese Liste kann jederzeit mit ClearCollisions gelöscht werden.


Beispiel

Standardbeispiel:

Graphics3D 640, 480
SetBuffer BackBuffer()
camera = CreateCamera()
RotateEntity camera, 45, 0, 0
PositionEntity camera, 0, 15, - 10
light = CreateLight()
RotateEntity light, 45, 0, 0

sphere = CreateSphere(32)
EntityType sphere, 1
EntityRadius sphere, 1
PositionEntity sphere, 0, 11, 0

cube = CreateCube()
EntityType cube, 2
EntityColor cube, 0, 100, 0
PositionEntity cube, 0, - 5, 0
ScaleEntity cube, 10, 10, 10

cylinder = CreateCylinder(32)
EntityType cylinder, 2
EntityColor cylinder, 255, 0, 0
PositionEntity cylinder, 0, 7, 0
ScaleEntity cylinder, 2, 2, 2

Collisions 1, 2, 2, 2

While Not KeyDown(1)
   x# = 0
   y# = 0
   z# = 0
   If KeyDown(203) = 1 Then x# = - 0.1
   If KeyDown(205) = 1 Then x# = 0.1
   If KeyDown(208) = 1 Then z# = - 0.1
   If KeyDown(200) = 1 Then z# = 0.1
   MoveEntity sphere, x#, - 0.1, z#
   UpdateWorld
   RenderWorld
   col = CountCollisions(sphere)
   Text 0, 0, "Kollision(en):"
   For i = 1 To col
      Text 000, i * 20, "Entity=" + CollisionEntity(sphere, i)
      Text 150, i * 20, "Surface=" + CollisionSurface(sphere, i)
      Text 300, i * 20, "Triangle=" + CollisionTriangle(sphere, i)
   Next
   Flip
Wend
End


Siehe auch

ClearCollisions, CollisionEntity, CollisionSurface, CollisionTime, CollisionTriangle, CountCollisions, EntityBox, EntityCollided, EntityPick, EntityRadius, EntityType, GetEntityType, MeshesIntersect, ResetEntity

Übersicht 3D Grafik Kollision