Назад

      Rem Устанавливаем синхронизацию
      Sync On
      Sync Rate 30

      Rem Создаем кубики в случайном порядке
      For x = 1 to 5
          Make object cube x,100
          Position object x,Rnd(2000),0,Rnd(2000)
          Set object collision to boxes x
      Next x

      Rem Создаем сферу
      Make object sphere 10,50
      Position object 10,-100,0,-100
      Set object collision to spheres 10

      Rem Основной цикл
      Do
         Rem  Сохраняем значение вертикального угла в aY#
         aY# = Object angle Y(10)

         Rem  Управление камерой с клавиатуры
         If Upkey()=1 then Move object 10,10
         If Leftkey()=1 then Yrotate object 10,Wrapvalue(aY#-5)
         If Rightkey()=1 then Yrotate object 10,Wrapvalue(aY#+5)

         Rem Обнаруживаем столкновение
         If Object collision(10,0)>0 then position object 10,X#,0,Z#

         Rem Сохраняем положение игрока в X# и Z#
         X# = Object position x(10)
         Z# = Object position z(10)

         Rem Получаем новое положение камеры и сохраняем его в cZ# и cX#
         cZ# = Newzvalue(Z#,aY#-180,100)
         cX# = Newxvalue(X#,aY#-180,100)

         Rem Устанавливаем камеру
         Position Camera cX#,75,cZ#

                    Rem Направляем камеру на объект
         Point camera X#,25,Z#

         Rem Обновляем экран
         Sync

      Loop

В этом уроке мы покажем, как использовать команды DarkBASIC для обнаружения столкновений. Мы добавили их в исходный код предыдущего урока.

      Set object collision to boxes x

В цикл, где создаются и размещаются кубические объекты, мы вставили команду "Set Object Collision To Boxes". Она устанавливает тип обнаружения столкновений с объектами в форме куба, то есть соответствующий форме наших объектов. Чтобы передать команде "Set Object Collision To Boxes" номера объектов, мы используем переменную цикла "х".

      Set object collision to spheres 10

Эта команда тоже устанавливает тип обнаружения столкновений с объектами, но не в форме куба, а в форме сферы, такой, как у нашего объекта-игрока. Выбор типа столкновений зависит от вас. Старайтесь только, чтобы он лучше всего подходил для игры, которую вы создаете.

      If Object collision(10,0)>0 then position object 10,X#,0,Z#

Эта строка кода определяет столкновение объектов. Если наш объект-игрок сталкивается с каким-либо другим объектом, он перемещается в место, где находился перед столкновением. Эти координаты хранятся в переменных X# и Z#. Обратите внимание, что мы определяем столкновение после перемещения объекта и перед тем, как сохраняем новые значения его координат. Этим мы обеспечиваем возвращение объекта-игрока на старое место, где он не может столкнуться с каким-нибудь другим объектом. Команда "Object Collision" используется для проверки столкновения. Первый параметр в скобках - это номер вашего объекта-игрока, для которого определяется столкновение. Второе значение - номер объекта, столкновение с которым вашего объекта-игрока нужно проверить. Здесь мы применяем значение 0, чтобы DarkBASIC обнаруживал столкновение с любым объектом. В этом случае команда "Object Collision" возвращает номер объекта, с которым столкнулся объект под номером 10, и значение 0, если столкновения не произошло. Если эта команда возвратит значение больше 0, то столкновение обнаружено, и мы помещаем объект-игрок в то место, где он находился перед столкновением.

Еще один тип столкновений - полигонный. Он используется при обнаружении столкновений с крупными объектами, такими как здания, построенными вами в 3D-сцене. Теперь, после знакомства с новыми командами, вы можете применять обнаружение столкновений в своих программах. Чтобы научиться свободно пользоваться ими, попробуйте внести в них следующие изменения.

Попробуйте поменять значение второго параметра в команде "Object Collision" на 3. Перемещаясь по 3D-сцене и сталкиваясь с кубическими объектами, попытайтесь найти объект под номером 3.

Измените тип столкновений, чтобы обнаруживать столкновения объекта-игрока с объектами не в форме сферы, а в форме куба, и посмотрите, как это отражается на столкновениях с объектами в форме куба.

 

Hosted by uCoz