|
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 |
Главная страница
Нажмите сюда, чтобы увидеть последнюю версию этой страници в интернете