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

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

  Все выпуски  

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


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


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

  Рассылка не выходила по причине болезни автора. :-| Лежал в больнице. Извините все за такую задержку! На будущее - постараюсь не болеть. ;-)

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

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


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

      1. Новости.

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

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




Новости

  На сайте DarkBASIC Pro добавились демки, которые можно скачать.

  Crow Interactive на сайте darkbasic.narod.ru разместили свой первый рекламный ролик игры ARMAGEDDON. Это предистория игры. Самого геймплея вы в нем не увидите, надеюсь, что в следующем ролике мы его увидим. Все же интересно увидеть интерфейс игры и все такое прочее. :-) А пока данный ролик сделан с очень сильным сжатием изображения и качественной картинкой не отличается. Хотя, что можно еще желать от Интернета? И при таком-то качестве, ролик занимает около полутора мегабайт. Но посмотреть стоит - все же ждали его с июня месяца. :-))

  Очень приятно удивил сайт DBDN (автор inF1n1ty). С начала года было много попыток создания умельцами сайта "всех времен и народов" по DarkBASIC-у, но как-то они не прижились. У автора сайта DBDN нашлись силы не только сделать сайт, но и заботиться о его содержании. Это очень приятно! Сайт нужный и в первую очередь, для тех кто уже пишет игры. Сайт по праву включен в "Полезные ссылки" на www.darkbasic.ru

  Получил диск DarkMATTER от Михаила Новикова (Медиахаус). В следующем номере рассылки читайте обзор диска.

  С сайта darkbasic.narod.ru вы можете свободно скачать демонстрационную русскую версию DarkBASIC-а, там же русская документация и много примеров. Прямая ссылка - вверху этого выпуска! Установочный файл разбит на 4 части, для удобства скачивания и дабы не нарушать "Пользовательсое соглашение" на www.narod.ru. Данная версия DarkBASIC-а плезна всем, кто не обзавелся лицензионной копией или желает просто ознакомиться с языком. Рекомендую всем!

  На официальном сайте выложена английская демонстрационная версия DarkBASIC Professional. Прямая ссылка здесь - 8,8 Мегабайт.




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

  В прошлом номере рассылки мы научились делать вид от третьего лица (вид "из глаз" главного персонажа нашей игры) и создали туман.
  Кстати, туман у нас отлично получился, но он не совсем реальный. У настоящего тумана есть еще и фазы его появления и пропадания. Для придания большей реалистичности нашей игре, давайте "оживим" туман. Делается это так:
  1. Для изменения плотности тумана будем менять значение в команде FOG DISTANCE то увеличивая его, то уменьшая. Естественно, значение в команду будем передавать с помощью переменной.
  2. Чтобы плотность тумана не "болталась" туда-сюда, давайте попробуем использовать новую команду TIMER(). Вот что написано о ней в "Руководстве пользователя":
  "Эта команда возвращает значение системного времени, постоянно возрастающее в 1000 раз в секунду. Системное время выводиться в миллисекундах (1000 милисекунд = 1 секунде). Синтаксис: Возвращаемое значение = TIMER()"
  Отлично! С помощью этой команды мы можем "засечь" во сколько у нас появился туман.
  3. С помощью команды RND() мы можем вычислить продолжительность неизменяемого состояния тумана, и проверять в игровом цикле командой TIMER() "не настало ли время изменить плотность?". Если время пришло, вычисляем с помощью команды RND() новую плотнось и плавно (в цикле) меняем значение FOG DISTANCE на новое значение.
  Ну вот, наметки для работы я вам дал. Что у вас получиться -
присылайте. В следующем номере рассылки, мы рассмотрим типичные ваши ошибки и успехи! :-)

  Сегодня начнем изучать последнюю часть "Руководства по созданию 3D-игр" под названием "Игра". В ней 14 уроков, на которых вы узнаете как: загрузить объекты (монстры, солдаты, дома и пр.) в игру, сделать управление с помощью мыши, разместить трехмерные звуки, создавать эффектные взрывы, сделать радар и прочее.
  Для более детальной и полной информации - рекомендую обратиться к первоисточникам. А это компания "Медиахаус" и "Руководство пользователя", которое вы получаете в коробке с лицензионным DarkBASIC-ом.

III. ИГРА
1. Загрузка объектов

Цель урока: научиться загружать объекты в 3D-сцену и строить фундамент игровой программы.

Существует множество различных приложений, способных создавать и сохранять 3D-модели. В DarkBASIC можно использовать как формат "X" DirectX, так и формат "3DS" 3DStudio. В отличие от стандартных примитивов DarkBASIC, модели этих форматов помогут вам создавать более реалистичные и богатые графикой сцены.

Sync On
Sync Rate 30
Hide Mouse
autocam off

Backdrop on
Set camera range 1,5000

Fog on
Fog distance 4000
Fog color RGB(128,128,128)
Color Backdrop RGB(128,128,128)

Rem Создаем матрицу
Make matrix 1,10000,10000,20,20

Rem Текстурируем матрицу
Load image "grass09.bmp",1
Prepare matrix texture 1,1,1,1
Fill matrix 1,0,1

rem Присваиваем координатам вершин матрицы случайные значения
randomize matrix 1,125

rem Загружаем объект
Load object "idle.x",2

position object 2,5000,Get Ground Height(1,5000,5500),5500

Rem Основной цикл
Do
set cursor 0,0
print X#
print Y#
print Z#
 Rem  Сохраняем угол объекта
 CameraAngleY# = Camera angle Y()

 Rem  Управление перемещением камеры
 If Upkey()=1
  XTest# = Newxvalue(X#,CameraAngleY#,20)
  ZTest# = Newzvalue(Z#,CameraAngleY#,20)
  If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
   Move camera 10
  Endif
 Endif

 If Leftkey()=1 then Yrotate Camera Wrapvalue(CameraAngleY#-5)
 If Rightkey()=1 then Yrotate Camera Wrapvalue(CameraAngleY#+5)

 X# = Camera position X()
   Z# = Camera position Z()

 Y# = Get ground height(1,X#,Z#)
 Position Camera X#,Y#+35,Z#

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

Прежде всего, введем несколько полезных команд.

  Hide Mouse

Команда "Hide mouse" убирает с экрана курсор мыши. В большинстве случаев в 3D-сценах курсор мыши на экране вам не понадобится.

  autocam off

Команда "Autocam Off" выключает режим автоматической камеры. Когда этот режим включен, то при создании каждого новый объект в DarkBASIC, камера перемещается для того, чтобы показать этот объект. Если загружается большое число объектов, камера будет показывать каждый из них по мере загрузки. Выключение этого режима также играет свою роль при загрузке матрицы. Когда режим автоматической камеры выключен, камера устанавливается в центр созданной вами матрицы. Если режим включен, то камера будет установлена в позицию с координатами (0,0,0) в 3D-сцене.

  Load object "idle.x",2

"Load Object" - основная команда для загрузки объекта в DarkBASIC. Первый параметр этой команды - имя файла объекта, загружаемого в 3D-сцену. Чтобы команда распознала имя файла, оно должно быть заключено в кавычки. Второй параметр команды - это номер, назначаемый данному объекту. Эта команда очень похожа на команды "Make Object". Все команды для работы с объектами, описанные в предыдущих уроках, будут работать с загруженными объектами точно так же, как они работают с объектами, созданными в DarkBASIC.

  Loop object 2

Команда "Loop Object" осуществляет циклическую анимацию загруженного в DarkBASIC объекта. Если загруженный объект не содержит данных об анимации, использование этой команды может вызвать ошибку. Создавая анимированный объект в специальной программе, обратите внимание на плавность анимации в цикле, в противном случае будет наблюдаться дергающееся движение при переходе модели от последнего к первому кадру анимации.

2. Управление при помощи мыши

Цель урока: объяснить, как использовать команды мыши для перемещения камеры.

Во многих играх используется такое свойство настройки, как "mouse look", позволяющая поворачивать камеру перемещением мыши. Это более эффективный метод управления камерой, чем управление с клавиатуры.

Sync On
Sync Rate 30

hide mouse

Backdrop on
Set camera range 1,5000

Fog on
Fog distance 4000
Fog color RGB(128,128,128)
Color Backdrop RGB(128,128,128)

Rem Создаем матрицу
Make matrix 1,10000,10000,20,20

Rem Текстурируем матрицу
Load image "grass09.bmp",1
Prepare matrix texture 1,1,1,1
Fill matrix 1,0,1

rem Присваиваем координатам вершин матрицы случайные значения
randomize matrix 1,125
X#=5000
Z#=5000
Rem Основной цикл
Do
 OldCamAngleY# = CameraAngleY#
 OldCamAngleX# = CameraAngleX#

 CameraAngleY# = WrapValue(CameraAngleY#+MousemoveX()*0.2)
 CameraAngleX# = WrapValue(CameraAngleX#+MousemoveY()*0.2)

 Rem  Управление перемещением камеры
 If Upkey()=1
  XTest# = Newxvalue(X#,CameraAngleY#,10)
  ZTest# = Newzvalue(Z#,CameraAngleY#,10)
  If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
   X#=XTest#
   Z#=ZTest#
  Endif
 Endif

 If Downkey()=1
  XTest# = Newxvalue(X#,Wrapvalue(CameraAngleY#-180),10)
  ZTest# = Newzvalue(Z#,Wrapvalue(CameraAngleY#-180),10)
  If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
   X#=XTest#
   Z#=ZTest#
  Endif
 Endif

 Yrotate camera CurveAngle(CameraAngleY#,OldCamAngleY#,24)
 Xrotate camera CurveAngle(CameraAngleX#,OldCamAngleX#,24)

 Y# = Get ground height(1,X#,Z#)
 Position Camera X#,Y#+50,Z#

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

Вы уже заметили, что мы используем тот же код, что и в предыдущем уроке. В последующих уроках мы продолжим "надстраивать" этот код, чтобы в итоге создать завершенную игру.

 OldCamAngleY# = CameraAngleY#>
 OldCamAngleX# = CameraAngleX#
 CameraAngleY# = WrapValue(CameraAngleY#+MousemoveX()*0.2)
 CameraAngleX# = WrapValue(CameraAngleX#+MousemoveY()*0.2)

Здесь в основном цикле мы сохраняем значения углов поворота камеры по осям Y и X в переменных "OldCamAngle" и после этого присваиваем новые значения переменным CameraAngle. Мы используем команду "WrapValue", чтобы значения углов находились в диапазоне от 0 до 360 градусов. Чтобы изменить значение переменных "CameraAngle", мы прибавляем к ним значения, возвращаемые командами "MouseMove", умноженные на поправочный коэффициент 0,2. Команды "MouseMoveX" и MouseMoveY()" возвращают относительное значение пространственных координат, на которое переместилась мышь с момента последнего считывания данных. Если быстро перемещать мышь вверх, вниз, вправо и влево, то возвращаемое значение будет намного больше, чем то, которое бы было при медленном перемещении мыши. Возвращаемое значение также зависит от размера экрана, используемого программой. Перемещение мыши со средней скоростью обычно возвращает значения от 8 до 16. Если эти значения прибавлять непосредственно к значениям углов поворота камеры, то скорость ее поворота будет слишком высокой. Нормализация этой величины путем умножения возвращаемого значения перемещения мыши на поправочный коэффициент 0,2 приводит к более приемлемым результатам.

 Yrotate camera CurveAngle(CameraAngleY#,OldCamAngleY#,24)
 Xrotate camera CurveAngle(CameraAngleX#,OldCamAngleX#,24)

 Y# = Get ground height(1,X#,Z#)
 Position Camera X#,Y#+50,Z#

После обработки всех значений, введенных с клавиатуры и мыши, мы поворачиваем камеру при помощи команд поворота камеры, используя команду "CurveAngle" для плавного перехода от старого угла положения камеры к новому. Первый параметр этой команды - новое значение угла, на который мы желаем повернуть камеру. Второй параметр - текущий угол поворота камеры. Третий параметр - скорость, с которой мы желаем перейти от старого к новому положению камеры. Команда "CurveAngle" изменяет это значение по кривой, в результате чего значение, используемое для вращения, находится в промежутке между старым и новым значением.

Заметьте интересный эффект поворота камеры, получаемый путем замены следующих двух строки кода

 OldCamAngleY# = CameraAngleY#
 OldCamAngleX# = CameraAngleX#

на

 OldCamAngleY# = Camera Angle Y()
 OldCamAngleX# = Camera Angle X()

с использованием команд "Camera Angle".


3. Боковое движение (стрейфинг)

Цель урока: Показать способ реализации бокового движения (стрейфинга).

Боковое движение (стрейфинг) - это отличный способ ловко уходить от ракет или в движении просматривать боковые пространства. Мы продемонстрируем, как реализовать этот режим с использованием клавиш "стрелка вправо" и "стрелка влево". Здесь мы приводим только ту часть кода, которая претерпела изменения по сравнению с предыдущим уроком. По мере добавления новых возможностей в нашей игре, код становится слишком большим, чтобы приводить его целиком.

 If Leftkey()=1
  XTest# = Newxvalue(X#,Wrapvalue(CameraAngleY#-90),10)
  ZTest# = Newzvalue(Z#,Wrapvalue(CameraAngleY#-90),10)
  If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
   X#=XTest#
   Z#=ZTest#
  Endif
 Endif

 If Rightkey()=1
  XTest# = Newxvalue(X#,Wrapvalue(CameraAngleY#+90),10)
  ZTest# = Newzvalue(Z#,Wrapvalue(CameraAngleY#+90),10)
  If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
   X#=XTest#
   Z#=ZTest#
  Endif
 Endif

Боковое движение реализуется с помощью команд "NewXValue" и "NewYValue", предназначенных для определения значений X# и Z# следующей позиции. Для определения координат перемещения влево, мы сначала вычитаем 90 градусов из текущего значения угла поворота камеры "CameraAngleY#", чтобы обозначить направление движения. Чтобы значение угла не превышало 360 градусов, мы применяем команду "WrapValue". Используя значение этого угла в командах "NewValue", мы определяем координаты точки, находящейся в 10 единицах пространственных координат левее. Новые координаты сохраняются в переменных "XTest" и "ZTest". Затем производится проверка этих переменных, чтобы убедиться, что новые значения находятся в пределах матрицы. Если проверка оканчивается успешно, то новые значения сохраняются в переменных "X#" и "Y#" и используются для перемещения камеры. Как вы помните из урока I:2, ось Y проходит от верхней к нижней части экрана, поэтому любой поворот вокруг оси Y будет параллельным по отношению к матрице.

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



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

  Продолжаю знакомить вас с лучшими ОТЕЧЕСТВЕННЫМИ разработками.
  Всем нам приходилось читать книги. С развитием компьютерной техники появился вид книг в электронном виде - это файлы в тестовых форматах (txt, doc, rtf, htm). Программа под названием ToM Reader от "Петровича" поможет вам с комфортом читать книги на экранах ваших мониторов и даже более того - может "на ночь почитать вслух". :-)) Поддерживает изменяемое внешнее оформление (skins) - можно читать книгу и в виде современного издания, и в виде древнего фалианта. Очень красивое оформление! Вы можете скачать дополнительные внешние оформления... Программа сама отформатирует весь текст, для удобного чтения.

Цвет текста и его размер вы можете выбрать сами или оставить принятое "по умолчанию". Но и это еще не все - программа бесплатная! :-) Обязательно
посетите сайт автора программы ToM Reader и скачайте ее последнюю версию. Разачарованными вы не будете! Это лучший представитель, подобного рода, программ!


Выпуск закончил 3 октября 2002 года в 09:02 мск


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

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

В избранное