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

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

  Все выпуски  

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


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


DarkBASIC БЕСПЛАТНО! + примеры и "фенечки"


Номер 10/август 2002
От редактора

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

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


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

      1. Новости.

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

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




Новости

  На официальном русском форуме по DarkBASIC, было заявлено о скором выходе в экономичной упаковке русской версии DarkMATTER (писал в прошлом номере рассылки) и русского патча 1.13 к существующей версии. Также нас порадовали обещанием выхода русской демо-версии DarkBASIC. Те кто сейчас пользуются демонстрационной английской версией, смогут скачать её же, но на русском языке. Также было заявлено, что в новые коробки с DarkBASIC будет вкладываться диск с DarkMATTER-ом! Патч 1.10 с расширенными возможностями, который будет на диске DM - будет полный без ограничения времени пользования. Как и в английской версии. Патч 1.13 - то же самое с теми же расширенными возможностями, предназначен для скачивания с сайта - с ограничениями 30 дней. Как и в оригинале по всему остальному земному шарику. А на оффициальном русском сайте, вскоре появиться опрос, где будет решаться судьба выпуска DarkBASIC Profession в России (СНГ) и его стоимости. Хотя аналогчный опрос мной уже был проведен (79% - за! русскую версию, 7% - купят английскую, 14% - против любой), оффициальный опрос нельзя игнорировать! О его начале я сообщу. А пока проведу собственный опрос, касающийся пакета дополнений DarkMATTER.

DarkBASIC
Купите ли вы DarkMATTER?
Результаты голосования

Другие голосования




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

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

II. МАТРИЦА
1. Создание матрицы

Цель урока: ознакомление с командами, создающими матрицу.

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

    Rem Создаем матрицу
    Make Matrix 1,2000,2000,50,50

    Rem mY - переменная для хранения высоты матрицы
    mY=100

    Rem Помещаем камеру над матрицей
    Position Camera 0,1000,0

    Rem Основной цикл
    Do

         Rem  Управление камерой с клавиатуры
         If Upkey()=1 then Move camera 10
         If Downkey()=1 then Move camera -10

         Rem Ввод для заполнения матрицы случайными значениями
         If Spacekey()=1 then randomize matrix 1,mY
         If Leftkey()=1 then mY=mY+1
         If Rightkey()=1 then mY=mY-1
         If mY < 1 then mY =1

         Rem Направляем камеру в центр матрицы
         Point Camera 1000,0,1000

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

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

    Make Matrix 1,2000,2000,50,50

Первая новая команда, которую мы обсудим - это команда Make Matrix. Она создает объект "Матрица" в вашей 3D-сцене. Что означают параметры этой команды? Первое число после команды - это номер создаваемой матрицы. Этот номер, как и в командах управления объектами и изображениями, является уникальным идентификатором. Он позволяет вам создавать и манипулировать многочисленными матрицами в 3D-сцене. Последующие два числа - это размеры матрицы, которую вы хотите создать, в пространственных координатах сцены. Они представляют значения координат X и Y. В большинстве случаев эти два значения будут одинаковыми, но мы уверены, что вы сможете найти применение для матриц различных размеров. Следующие два числа - это количество сегментов матрицы. В этом примере матрица размером 2000х2000 разделена в каждом направлении на 50 сегментов (размер ячейки получается 40x40).

    If Spacekey()=1 then Randomize Matrix 1,mY

Эта строка кода знакомит нас с командой Randomize Matrix. При нажатии на пробел осуществляется вызов этой команды, которая задает случайное значение высоты каждой из вершин матрицы в диапазоне между 0 и числом, содержащимся в переменной mY. Первое число после команды -- это номер изменяемой матрицы. Второе число - это диапазон случайного значения для изменения высоты матрицы. В программе вы можете изменить значение переменной mY, нажимая клавиши "стрелка вверх" и "стрелка вниз". Нажатие на клавишу "пробел" позволяет изменить матрицу, что дает вам возможность создавать крутые пики гор или пологие холмы.

Попытайтесь изменять значения параметров в команде Make Matrix и посмотреть, каким образом они влияют на величину и размеры матрицы.


2. Текстурирование матрицы

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

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

Sync On
Sync Rate 30

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

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

rem Заполняем матрицу случайными значениями высоты
randomize matrix 1,250

rem Накладываем текстуру случайным образом на каждый тайл матрицы
For x = 0 to 19
 For z = 0 to 19
  t= rnd(3)+1
  Set Matrix Tile 1,x,z,t
 Next z
Next x

Rem Вносим изменения в матрицу
update matrix 1

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

 Rem  Управление перемещением камеры
 If Upkey()=1 then Move camera 10
 If Leftkey()=1 then Yrotate Camera Wrapvalue(CameraAngleY#-5)
 If Rightkey()=1 then Yrotate Camera Wrapvalue(CameraAngleY#+5)
    If Spacekey()=1
        Fill matrix 1,Rnd(50),Rnd(3)+1
          randomize matrix 1,250
    endif

X# = Camera position X()
   Z# = Camera position Z()
 Position Camera X#,250,Z#

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

Начнем с подготовки текстуры для матрицы.

    Prepare matrix texture 1,1,2,2

The "Команда "Prepare Matrix Texture" применяется для разбиения на ячейки текстуры, накладываемой на матрицу. Первый параметр после команды - это номер матрицы, для которой мы собираемся подготовить текстуру. Второй параметр - это номер изображения, используемого для текстурирования матрицы. Третий и четвертый параметры - это число создаваемых на каждой оси ячеек. Здесь мы использовали в качестве первого параметра значение 2. Это число делений по оси X. Значение 2 сообщает DarkBASIC, что текстуру надо разделить пополам на две части. В последнем параметре мы также использовали значение 2. Это, в свою очередь, число делений по оси Y. Таким образом, мы разделили изображение на четыре секции, или четыре отдельные текстуры. Изображение, используемое для наложения текстуры на матрицу, не может быть больше, чем 256х256 пикселов, однако вы можете разбить его максимум на 256х256 отдельных тайлов. В большинстве случаев значение двух последних параметров команды будут одинаковы. Если значения параметров будут разными, то текстуры будут непропорционально растянуты при наложении на квадратные ячейки матрицы. Тайлы нумеруются, начиная с левого верхнего угла, слева направо и сверху вниз. Нумерация начинается с 1.

 For x = 0 to 19
 For z = 0 to 19
  t= rnd(3)+1
  Set Matrix Tile 1,x,z,t
 Next z
Next x

Эти вложенные циклы проходят по каждой ячейке матрицы, и случайным образом назначают для каждой из них ранее подготовленный тайл. Чтобы назначить отдельной ячейке матрицы определенный тайл, мы используем команду "Set Matrix Tile". Первый параметр после команды - номер матрицы, которую мы желаем изменить. Второй и третий параметры - это номера строки и колонки, в которых располагается ячейка матрицы, для которой мы хотим изменить тайл. Последний параметр - это номер тайла изображения, размещаемого в определенной ячейке матрицы. Для выбора случайного номера тайла в интервале от 0 до 3 мы применили команду "Rnd". Заметьте, что мы добавили 1 к этому числу, так как тайла с номером "0" не существует. Таким образом, после добавления 1, производится выбор случайного номера тайла в интервале от 1 до 4.

    If Spacekey()=1
        Fill matrix 1,Rnd(50),Rnd(3)+1
        randomize matrix 1,250
    endif

Эта часть кода изменяет высоту матрицы и случайным образом изменяет тайлы для каждой ячейки матрицы при каждом нажатии клавиши "пробел". Команда "Fill Matrix" устанавливает определенную высоту и определенный номер тайла изображения для всех тайлов матрицы. Эта команда наилучшим образом подходит для установки начальных значений для всех ячеек матрицы. Первый параметр после команды - номер матрицы, которую мы хотим изменить. Второй параметр - это высота, устанавливаемая нами для всех вершин матрицы. Это полезно при добавлении еще одной матрицы (например, матрицы "вода"), или создании слоев матриц, наложенных друг на друга. Для выбора случайного значения высоты в интервале от 0 до 50 мы использовали команду "Rnd". Эта величина соответствует координатам по оси Y в созданном вами 3D-пространстве. Наконец, последний параметр - это номер тайла подготовленной матричной текстуры, который мы хотим использовать. Для случайного выбора тайла мы применили команду "Rnd".

Попробуйте изменить значения последних двух параметров в команде "Prepare Matrix Texture", чтобы посмотреть, как изменятся изображения в тайлах. Затем измените значения параметров каждой команды "Rnd" в соответствии с измененным числом тайлов, подготовленных вами для матрицы.


3. Перемещение по матрице

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

Sync On
Sync Rate 30

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 Основной цикл
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

Эта программа демонстрирует, как поместить камеру таким образом, чтобы она следовала рельефу местности на матрице.

set cursor 0,0
print X#
print Y#
print Z#

Мы начнем этот урок с объяснения двух полезных текстовых команд "Set Cursor" и "Print". Первая из них помещает курсор в точку на экране с координатами X и Y (параметры команды), с которой мы собираемся начать вывод текста, а вторая выводит текст на экран. Здесь мы используем переменные X#, Y# и Z#. На экран будут выведены значения каждой из них. Если вы хотите вывести на экран текстовую строку, вы должны заключить ее в кавычки.

   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

Эта часть кода ограничивает перемещение камеры для того, чтобы предотвратить выход игрока за пределы матрицы. Переменные Xtest# и Ytest# хранят координаты позиции, в которой мы собираемся установить камеру. Имейте в виду, что значение "20" на самом деле является расстоянием вдвое большим, чем то, на которое мы желаем переместить камеру. Такой прием не подпускает игрока к абсолютной границе матрицы. Выражение сравнения "If" проверяет, не вышли ли новые значения координат за границы матрицы. Матрица занимает площадь в координатах от 0 до 10000 в каждом направлении. Мы используем союз "and" для того, чтобы осуществить более одного сравнения в выражении "If". Если игрок не вышел за пределы указанных границ, то камера перемещается в новое место.

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

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

После того, как камера переместилась, мы сохраняем значения ее координат в переменных X# и Z#. Затем мы получаем координату высоты матрицы в том месте, где расположена камера, и сохраняем это значение в переменной Y#, используя команду "Get Ground Height". В скобках после команды первый параметр - это номер матрицы, для которой мы определяем значение высоты. Следующие два параметра - координаты X и Z, в этой точке мы желаем узнать высоту матрицы. После определения высоты мы устанавливаем камеру на 35 пунктов выше матрицы. Это позволяет перемещаться по матрице на 35 пунктов выше ее рельефа.
 

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




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

  Еще одна чрезвычайно полезная программа - WatzNew. Я ей пользуюсь, чтобы самому не лазить по многочисленным любимым сайтам, а также проверять e-mail-ы в 5 почтовых ящиках. Новостные каналы по популярным сайтам DB вы можете бесплатно скачать с моего сайта в самое ближайшее время. А пока несколько скриншотов с моего рабочего стола - в конце статьи.

На русскую страничку WatzNew !

    WatzNew - популярная программа, предназначенная для проверки ваших любимых веб-ресурсов, почтовых ящиков, форумов на наличие новой информации, и предоставляющая ее вам в компактном виде. WatzNew служит так называемым <персональным веб-порталом>: она позволяет автоматически собирать информацию из различных источников, проверять на обновления и показывать компактно в виде списка каналов, сохраняя массу вашего времени и позволяя получать информацию в наиболее комфортной манере.

    Если вы регулярно посещаете одни и те же сайты - то эта программа просто незаменимая вещь. У меня есть несколько хобби: видеомонтаж домашнего видео и создание виртуального мира на DarkBASIC-е. Естественно, я нашел в Интернете сайты по соответствующей тематике и захожу на них - с целью проверки обновленной инфорации и получение новостей. Раньше все это я делал вручную, т.е. открывал окно Internet Explorer-а, в нем залазил в папку "Избранное" и ... с часок лазил по сайтам. Сейчас, я экономлю больше 1 часа в день и занимаюсь более нужными делами - WatzNew сама, вместо меня заходит на сайты и проверяет "нет ли чего там новенького?" :-) и каждые 15 минут проверяет все 5 электронных ящика. Русский интерфейс + русская документация! Лучшей подобной программы вы не найдете! Рекомендуется к скачиванию - 30 дней пользуетесь бесплатно. Этого хватит, чтобы по праву её оценить и зарегистрировать в бессрочное пользование с пожизненным бесплатным обновлением за каких-то 200 рублей. Я сделал так!

Папка с каналами по DarkBASIC-у

WatzNew автоматичеси смотрит изменения на официальном сайте
И форум просматривает тоже... :-)

Выпуск закончил 14 августа 2002 года в 11:02 мск


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

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

В избранное