Отправляет email-рассылки с помощью сервиса Sendsay

Новости сайта www.dyda.info

  Все выпуски  

DarkBASIC - легко создаем 3D миры и игры!


Информационный Канал Subscribe.Ru


БЕСПЛАТНО! Русский DarkBASIC демо + примеры и "фенечки"
  Ограничение по трафику
Номер 13/октябрь 2002
От редактора

  Чертовский номер рассылки! :-)) Надеюсь когда нибудь выпустить очередной номер рассылки под ?666. ;-))

  Информация для новых подписчиков! Если вы "не врубаетесь" о чем идет речь в рассылке - посмотрите предыдущие номера рассылки. И вам станет интереснее! :-) Также советую посетить оффициальный русский сайт www.darkbasic.ru и darkbasic.narod.ru

  Замирая в глубоком пардоне, Илья Середа.


Содержание номера:

      1. Новости.

      2. Руководство по созданию 3D-игр.

      3. Это интересно...




Новости

  За пять дней 2 раза была удалена с моего сайта на www.narod.ru демка DarkBASIC-а. Поэтому вы и не смогли ее получить. В результате и благодаря ;-) подписчику моей рассылки Руслану Юрецкому вы можете скачать полную демку одним файлом - обновленная ссылка как всегда вверху этого номера рассылки. Руслан выложил демку у себя с ограничениями по траффику, так что если вы прямо сейчас не смогли выкачать ее - попробуйте чуть позже. А для вашего удобства и для удобства скачивания файлов из Интернета, в том числе и демо вресии DarkBASIC-а в рубрике "Это интересно..." читайте и пользуйтесь рекомендованной мной программой.

  На сайте www.darkbasic.com появилась новая игра "Captan Zero", что в вольном русском переводе означает "Нулёвый капитан" :-)) Автор был вдохновлен "Star Control" и сделал игру в жанре классической аркады, но использующей все возможности 3D. Очень-очень симпатично! А какое меню! Рекомендую всем в качестве образца, да и просто поиграть! ;-) Также советую посетить страничку игры и посмотреть последние новости, и загрузить последнюю версию игры.


  На сайте www.darkbasicpro.com в разделе
Download вы можете скачать не только демки игр, но и исходные тексты этих игр! Если рядом с названием демки есть буква [s] - значит можно скачать и исходный тест к ней.

  Кроме Английского и Американского сайтов поддержки DarkBASIC Pro появился и новый сайт, но уже в Италии.




Руководство по созданию 3D-игр.

  Наверстываем упущенное время и сразу переходим к урокам. Задание данное вам на прошлом уроке, я надеюсь вы выполнили. Напишите мне и пришите исходные тексты полученного у вас тумана. В следующей рассылки мы рассмотрим алгоритмы и попытаемся следать их проще.

  Для более детальной и полной информации - рекомендую обратиться к первоисточникам. А это компания "Медиахаус" и "Руководство пользователя", которое вы получаете в коробке с лицензионным DarkBASIC-ом.

III. ИГРА

4.Стрельба

Цель урока: показать, как реализовать стрельбу в режиме вида от первого лица.

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

remСоздаем пушку
Make object cylinder 1,2
XRotate Object 1,90
Fix object pivot 1
Scale object 1,100,100,500
position object 1,0,-7,15
Lock object on 1

Эта часть кода, помещенная перед основным циклом, создает цилиндрический объект и поворачивает его под прямым углом по отношению к установленному по умолчанию виду из камеры. Чтобы сделать такую ориентацию объекта ориентацией по умолчанию, мы используем команду "Fix Object Pivot". Это означает, что углы поворота повернутого объекта устанавливаются равными 0 без смены ориентации объекта. Эта команда часто используется для загрузки моделей с нефиксированной ориентацией. Если загружается модель персонажа, а он лежит лицом вниз, то с помощью этой команды можно повернуть модель так, что персонаж будет стоять. Точка вращения объекта фиксируется для того, чтобы сделать текущее положение объекта положением по умолчанию. После выравнивания объекта по отношению к камере, мы используем команду "Scale Object" для масштабирования объекта в направлении оси Z. Таким образом, создается объект - вытянутый ствол пушки. Первый параметр этой команды - номер объекта для масштабирования. Следующие три параметра команды - направления X, Y и Z, в которых мы хотим масштабировать объект. Мы устанавливаем значение масштабирования по осям X и Y равным 100, что не приводит к изменению масштаба объекта в этих направлениях, так как эта величина представляет собой процентное отношение (100%). Масштабирование по оси Z мы указываем равным 500. Это означает, что размер объекта по оси Z будет увеличен в пять раз. Затем мы позиционируем объект. По умолчанию камера установлена в позицию с координатами (0,0,0) и углами поворота (0,0,0). Мы размещаем цилиндр на 7 единиц пространственных координат ниже камеры и на 15 единиц впереди камеры. Таким образом, создается сходство со стволом пушки.

Rem Создаем снаряд
Make Object Sphere 2,2
Hide Object 2

Этот код создает небольшой сферический объект, применяемый в игре в качестве снаряда. Чтобы скрыть объект, мы используем команду "Hide Object". Причина, по которой мы это делаем, заключается в том, что снаряд не должен быть виден до тех пор, пока мы не выстрелим из пушки.

  if Mouseclick()=1 and BulletLife=0
    Position object 2,X#,Y#+43,Z#
    Set object to camera orientation 2
    BulletLife =25
    show object 2
 Endif

В этой части кода описывается ввод данных при нажатии кнопки мыши. Затем задаются координаты снаряда при выстреле из пушки. Чтобы определить, была ли нажата кнопка мыши, мы используем команду "MouseClick()". Эта команда возвращает номер нажатой кнопки мыши: 1 - для левой кнопки, 2 - для правой, и 0 - если ни одна из кнопок не была нажата. Сравнение "if" также проверяет, не был ли снаряд уже выпущен, сравнивая значение переменной "BulletLife" с 0. Если обе проверки проходят успешно, то объект "снаряд" помещается на семь единиц ниже камеры. После этого он позиционируется по отношению к камере при помощи команды "Set Object To Camera Orientation". Эта команда имеет только один параметр - номер позиционируемого объекта. Так как снаряд только что создан, мы устанавливаем значение переменной "BulletLife" равным 25. Чтобы программа произвела рендеринг объекта-снаряда, используем команду "Show Object".

  If BulletLife > 0
     Dec BulletLife
     Move object 2,20
     if BulletLife = 0 then Hide object 2
  Endif

Эта часть кода отвечает за перемещение снаряда. Если значение переменной "BulletLife" больше нуля, то выполняется команда "Dec", уменьшающая это значение на единицу. Одновременно снаряд перемещается в направлении выстрела на 20 единиц. Затем снова проверяем значение переменной "BulletLife". Если оно равно 0, то "жизнь" снаряда закончилась и мы снова "прячем" этот объект.

Теперь вы можете добавить стрельбу в вашу игру.

5.Обычный звук и 3D-звук

Цель урока: показать, как загрузить и позиционировать источники 3D-звука.

В предыдущем уроке мы показали, как можно создать снаряд и стрелять. А сейчас добавим звуковые эффекты, чтобы выстрел в игре был более натуральным. Поскольку мы будем достаточно часто использовать переменные "CameraAngle", мы сократили их до аббревиатуры "cA" для удобства чтения кода.

 Load sound "crickets.wav",1
 Loop sound 1

Прежде чем мы рассмотрим 3D-звук, нам не помешает добавить в игру какой-нибудь звук окружающей среды. Команда "Load Sound" загружает звук в программу, но не воспроизводит его. Первый параметр этой команды - имя загружаемого звукового файла. Как и в любой другой команде, где требуется указывать имя файла, имя файла должно быть заключено в кавычки. Второй параметр команды - присвоенный этому звуку номер. DarkBASIC использует этот номер точно так же, как и при загрузке объектов или изображений. Номер является уникальным идентификатором для этого звука. Команда "Loop Sound" использует один параметр, номер воспроизводимого звука. Эта команда постоянно воспроизводит указанный звуковой файл. Понадобилось всего две команды, чтобы озвучить игру стрекотанием сверчков!

 Load 3Dsound "fireball2.wav",2

Команда "Load 3DSound" загружает звук выстреливаемого снаряда. Первый параметр этой команды - имя загружаемого звукового файла, а второй параметр - присвоенный этому звуку номер. Загружая трехмерный звук, мы сообщаем DarkBASIC, что желаем поместить источник звука в определенной точке 3D-сцены.

 Rem Поворачиваем камеру
 if cAX#>270
  if cAX#-270 > 90 then cAX#=270
 else
  if cAX# > 90 and cAX#-270<270 then cAX#=90
 endif
 YRotate camera CurveAngle(cAY#,oldcAY#,24)
 XRotate camera CurveAngle(cAX#,oldcAX#,24)

Эта часть кода добавлена в игровую программу для того, чтобы игрок случайно не перевернул камеру. Углы камеры также должны содержать корректную информацию для правильного позиционирования слушателя 3D-звука.

 Rem Позиционируем слушателя
 Position Listener X#,Y#+50,Z#
 Rotate Listener 0,cameraAngleY#,0

Команда "Position Listener" используется для позиционирования источника звука. Три параметра после команды обозначают координаты X, Y и Z, где вы хотите поместить слушателя. Мы будем использовать ту же позицию, в которой расположена камера. Команда "Rotate Listener" служит для поворота слушателя. Ее параметры - это углы X, Y и Z. Чтобы направление слушателя совпадало с направлением камеры, мы оставим значения углов X и Z равными 0, и будем учитывать только вращение вокруг оси Y. Для определения значения Y используем переменную "CameraAngleY#".

 Rem Выстреливаем снаряд
 if Mouseclick()=1 and BulletLife=0
  Position object 2,X#,Y#+43,Z#
  Set object to camera orientation 2
  BulletLife =25
  show object 2
  Loop sound 2
 Endif

В код, где мы проверяем, была ли нажата кнопка мыши, мы добавили команду "Loop sound", чтобы начал воспроизводиться звук выстреливаемого снаряда. Этот звук будет длиться до тех пор, пока не будет остановлен кодом, который проверяет время "жизни" снаряда.

If BulletLife > 0
  Dec BulletLife
  Move object 2,20
  bX#=Object position X(2)
  bY#=Object position Y(2)
  bZ#=Object position Z(2)
  Position sound 2,bX#,bY#,bZ#

  if BulletLife = 0
   Hide object 2
   stop sound 2
  endif
 Endif

В код стрельбы мы добавили две команды для обработки позиции и окончания звука. Команда "Position Sound" используется для размещения звука летящего снаряда в указанных 3D-координатах. Первый параметр этой команды - номер позиционируемого звука. Следующие три параметра определяют позицию, в которую помещен источник звука. Мы получили значения координат X, Y и Z снаряда и сохранили их в переменных "'bX#", "bY#" и "bZ#". Это и есть значения, используемые нами для позиционирования источника звука снаряда. Как только программа определит, что величина "BulletLife" достигла значения 0, применяется команда "Stop Sound" для прекращения воспроизведения звука.

6. Математические столкновения

Цель урока: показать, как реализовать простые математические столкновения.

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

If BulletLife > 0
  Dec BulletLife
  Move object 2,20
  bX#=Object position X(2)
  bY#=Object position Y(2)
  bZ#=Object position Z(2)
  Position sound 2,bX#,bY#,bZ#
  set cursor 10,10
   if Sqrt((mX# - bX#)^2 + (mY#+25 - bY#)^2 + (mZ# - bZ#)^2) <20
   text 240,220 ,"Цель поражена"
    BulletLife = 0
  endif

  if BulletLife = 0
   Hide object 2
   stop sound 2
  endif
 Endif

Следующие строки добавлены в ту часть кода, в которой проверяется время "жизни" снаряда.

  if Sqrt((mX# - bX#)^2 + (mY#+25 - bY#)^2 + (mZ# - bZ#)^2) <20
   text 240,220 ,"Цель поражена"
    BulletLife = 0
  endif

Это сравнение использует математическую функцию "Sqrt" для расчета расстояния между двумя объектами. Если расстояние меньше 20, то на экран выводится сообщение о том, что игрок поразил цель, и объект-снаряд прекращает свое существование путем установки времени "жизни" снаряда равным 0. Функция математического столкновения вычитает из значения координаты X цели, которое хранится в переменной mX#, значение координаты X снаряда. Затем это число умножается само на себя при помощи экспоненциальной операции " ^ ". Аналогичные вычисления осуществляются в отношении координат Y и Z. Заметьте, что мы добавили 25 к координате Y цели, так как это будет примерно соответствовать координате середины стоящей цели. Полученные значения складываются, и вычисляется квадратный корень полученной суммы. Окончательное значение можно рассматривать как расстояние между двумя объектами. Советуем запомнить эту строку кода на случай, если вам когда-либо потребуется определять расстояние между двумя точками в 3D-сцене.

Если вы не знакомы с квадратными корнями и экспонентами, вам придется обратиться к справочнику по математике, чтобы в деталях уяснить, как вычисляется расстояние. Знание того, чем являются переменные и значение, рассчитываемое по формуле, должно помочь вам в дальнейшем использовать эту часть кода в ваших собственных программах.

  В конце концов у вас должно получиться следующее.



Это интересно...

  Подключаетесь ли вы к Интернету через обычный модем, или сверхбыстрый кабель, или ADSL, ReGet Deluxe использует это соединение на полную мощность для того, чтобы загрузить файлы быстрее. ReGet Deluxe имеет много возможностей, предназначенных для повышения эффективности и невероятного увеличения скорости загрузки. Все это делает ReGet Deluxe незаменимым инструментом для опытных пользователей Интернета и тех, кому приходится часто загружать файлы.

Забери ReGet Deluxe СЕЙЧАС!
  Кроме меня :-)) этой программой пользуются очень много людей, среди них такие как знаменитый интернет-журналист Алекс Экслер, Дмитрий Турецкий и т.д.
  От себя добавлю, что это замечательная программа! Вы можете бесплатно скачать ее с сайта авторов из Санкт-Петербурга и пользоваться 30 дней. Но я бы рекомендовал один раз
купить регистрацию и пользоваться сколько душе угодно! Тем более, что не "вот каких" денег эта регистрация стоит, а 250 рублей, а для студетнов, так и вообще 210 рублей.


Выпуск закончил 8 октября 2002 года в 12:01 мск


(C) 2002 Илья Середа
http://darkbasic.narod.ru - это и так понятно :-)
    http://virland.narod.ru - "Домашняя киностудия"
     http://sereda.narod.ru - "ВАЗ 1111 ОКА"

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное