Collisions src_type,dest_type,method,response

Параметры

src_type - тип объекта, который будет проверяться на столкновения.
dest_type - тип объекта, с которым будут обрабатываться столкновения.

method - метод определения столкновений.
1: столкновения типа эллипсоид-к-эллипсоиду
2: столкновения типа эллипсоид-к-полигону
3: столкновения типа эллипсоид-к-паралелепипеду

response - как будет вести себя объект при столкновении.
1: остановка
2: скольжение1 - столкновение с полным скольжением
3: скольжение2 - скольжение с предотвращением скатывания с наклонов

Описание

Включает столкновения между двумя различными типами объектов.

Типы объектов - это номера, которые вы устанавливаете объекту при помощи комманды EntityType. Blitz использует типы объектов для проверки столкновений между всеми объектами, имеюшими данный тип.

Blitz имеет много вариантов проверки столкновений, для этого используется параметр method. Однако, проверка столкновений осуществляется всегда как эллипсоид-к-чему-либо. Для того, чтобы Blitz знал, каков размер объекта, проверяемого на столкновения, Вы должны сначала установить радиус этого объекта при помощи команды EntityRadius.

При установленном методе обработки столкновений эллипсоид-к-эллипсоиду (method=1), объектам, с которыми будут обрабатываться столкновения, тоже необходимо установить радиус (EntityRadius). При установленном методе обработки столкновений эллипсоид-к-паралелепипеду (method=3), объектам, с которыми будут обрабатываться столкновения, тоже необходимо установить габаритный контейнер или просто паралелепипед (EntityBox). При использовании метода эллипсоид-к-полигону (method=2) Вам не нужно определять ни радиус, ни габаритный контейнер.

Blitz не только определяет столкновения, но и определяет взаимодействия между ними. Для этого используется параметр response. У Вас есть три варианта взаимодействий: 1-остановка объекта, 2-полное скольжение объекта, 3-скольжение только вверх.

Проверка столкновений и взаимодействие объектов осуществляются при вызове функции UpdateWorld.

И, наконец, всякий раз, когда используется комманда Collisions, информация о столкновениях добавляется в список, содержащий информацию о столкновениях, который может быть очищен в любое время с использованием команды ClearCollisions.

Смотрите также: EntityBox, EntityRadius, Collisions, EntityType, ResetEntity.

Пример

; Пример Collisions
; ------------------

Graphics3D 640,480
SetBuffer BackBuffer()

; Установка типов столкновений
type_ground=1
type_character=2
type_scenery=3

camera=CreateCamera()
RotateEntity camera,45,0,0
PositionEntity camera,0,15,-10

light=CreateLight()
RotateEntity light,45,0,0

; Создать куб 'земля'
cube=CreateCube()
ScaleEntity cube,10,10,10
EntityColor cube,0,127,0
EntityType cube,type_ground
PositionEntity cube,0,-5,0

; Создать сферу 'персонаж'
sphere=CreateSphere( 32 )
EntityColor sphere,127,0,0
EntityRadius sphere,1
EntityType sphere,type_character
PositionEntity sphere,0,7,0

; Разрешить столкновения между type_character и type_ground
Collisions type_character,type_ground,2,2

; Создать цилиндр 'препятствие'
cylinder=CreateCylinder( 32 )
ScaleEntity cylinder,2,2,2
EntityColor cylinder,0,0,255
EntityRadius cylinder,2
EntityBox cylinder,-2,-2,-2,4,4,4
EntityType cylinder,type_scenery
PositionEntity cylinder,-4,7,-4

; Создать конус 'препятствие'
cone=CreateCone( 32 )
ScaleEntity cone,2,2,2
EntityColor cone,0,0,255
EntityRadius cone,2
EntityBox cone,-2,-2,-2,4,4,4
EntityType cone,type_scenery
PositionEntity cone,4,7,-4

; Создать призму 'препятствие'
prism=CreateCylinder( 3 )
ScaleEntity prism,2,2,2
EntityColor prism,0,0,255
EntityRadius prism,2
EntityBox prism,-2,-2,-2,4,4,4
EntityType prism,type_scenery
PositionEntity prism,-4,7,4
RotateEntity prism,0,180,0

; Создать пирамиду'препятствие'
pyramid=CreateCone( 4 )
ScaleEntity pyramid,2,2,2
EntityColor pyramid,0,0,255
EntityRadius pyramid,2
EntityBox pyramid,-2,-2,-2,4,4,4
EntityType pyramid,type_scenery
RotateEntity pyramid,0,45,0
PositionEntity pyramid,4,7,4

; Установка метода проверки столкновений и response
method=2
response=2

method_info$="ellipsoid-to-polygon"
response_info$="slide1"

While Not KeyDown( 1 )

x#=0
y#=0
z#=0

If KeyDown( 203 )=True Then x#=-0.1
If KeyDown( 205 )=True Then x#=0.1
If KeyDown( 208 )=True Then z#=-0.1
If KeyDown( 200 )=True Then z#=0.1

MoveEntity sphere,x#,y#,z#
MoveEntity sphere,0,-0.02,0 ; gravity

; Выбор метода проверки столкновений
If KeyHit( 50 )=True
method=method+1
If method=4 Then method=1
If method=1 Then method_info$="ellipsoid-to-sphere"
If method=2 Then method_info$="ellipsoid-to-polygon"
If method=3 Then method_info$="ellipsoid-to-box"
EndIf

; Выбор реакции на столкновение( response)
If KeyHit( 19 )=True
response=response+1
If response=4 Then response=1
If response=1 Then response_info$="stop"
If response=2 Then response_info$="slide1"
If response=3 Then response_info$="slide2"
EndIf

; Разрешить столкновения между between type_character и type_scenery
Collisions type_character,type_scenery,method,response

; Обработать столкновения
UpdateWorld

RenderWorld

Text 0,0,"Use cursor keys to move sphere"
Text 0,20,"Press M to change collision Method (currently: "+method_info$+")"
Text 0,40,"Press R to change collision Response (currently: "+response_info$+")"
Text 0,60,"Collisions type_character,type_scenery,"+method+","+response

Flip

Wend

End


Главная страница

Нажмите сюда, чтобы увидеть последнюю версию этой страници в интернете