Hilfe
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:
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

