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


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

  Это немного необычная рассылка. Вы здесь не найдете привычных "Новостей...", но прочитаете два интервью, которые не поместились в пятничном выпуске. И обзор DarkBASIC Professional от Дэвида Гуда (David Good) из компании CloneSoft, размещенный им в форуме официального сайта. С минимальными сокращениями.

  Следующие три урока по созданию объемной игры в стиле 3D-Action.

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


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

      1. Интервью с Константином Симоненко.

      2. Впечатления! от CloneSoft.

      3. Вся правда о DB Pro от David Good.

      4. Основы программирования.

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




Интервью с Константином Симоненко.

  Вашему вниманию предлагаю, интересный рассказ Константина Симоненко из нашей с ним переписки. Итак, кто же он? Константин Симоненко - украинец, родился в 1974 году в славном городе у моря Одессе, в 20 лет, по странному стечению обстоятельств, переехал из Одессы в Киев, имеет два высших образования, работает, нормальные игры начал писать с 1996 года, владеет Pascal, Delphi, C++, DirectX API; любит пиво, девушек любит (разных, почти всех), компьютер свой любит и машины (ездить). :-)

  А какие из всех представленных на сайте игр, были написаны на DarkBASIC-е? (Кроме "Любви...", эта игра идет на втором диске с лицензионным DB на русском языке).

  На Дарке написаны две последние игрушки Любовь и Глубина. Кстати та версия Любви101, которая идет с Дарком уже очень старая текущая 3.6 существенно исправлена и дополнена. Глубина тоже закончена, но я ожидаю выхода ДБпро для портирования игры под него.

  Это правда, что вы купили DarkBASIC один из первых на территории бывшего СССР? ;-)

  Да правда. Не буду хвастаться, да их хвастаться тут я думаю просто нечем. Я был первым зарегистрированным пользователем ДБ из Восточной Европы, а если Рик Ваннер не врет, то вообще числюсь в конце первой сотни зарегистрированных пользователей ДБ.

  И как началось ваше знакоство с DarkBASIC-ом?

  О ДБ я узнал случайно еще в сентябре 1999 года. Тогда Дарк еще только тестировался и я был одним из бета-тестеров предрелизных версий. В конце декабря 1999 года Ли Бамбер выпустил финальную версию 1.0, тогда же я купил ДБ, а 9 января 2000 года уже вскрывал коробку с долгожданным ДБ версии 1.0.

  Как вы его купили? Ведь пришлось заказывать его за "бугром"? :-)

  Заказывал ДБ я с официального сайта (оплачивал через PayPal карточкой Виза Электрон), коробка пришла через 2 недели, на таможне проблем никаких не было. Не знаю как сейчас, тогда в коробке лежал один диск и инструкция по инсталяции на 5 страничках и все. Зато адресс на конверте был написал лично рукой Бамбера (смеюсь).

  Интересно. А что было дальше?

  До 2001 года был активным участником форума на darkbasic.com потом надоело. Кстати отличные временна тогда были, с Ли Бамбером можно было запросто общаться по мылу и на форуме, задавать ему вопросы и советоваться. У меня сохранилась целая подшивка нашей переписки. Это сейчас он забурели, а тогда очень демократический форум был. Да раньше вообще все лучше было. Бамбер клепал патчи каждый месяц ей богу!!! Вплоть до версии 1.8, потом он на это дело забил и стал готовить этот мутный 3D Game Creator .. тьфу. Кстати тогда можно было спокойно на форуме попросить Бамбера вставить какой-нибудь нужный тебе оператор и он вставлял его в следующий же патч. Кстати возможно отключение выхода по клавише ESC был вставлен по моей просьбе. Мда, раньше короче все было лучше (по стариковски вздыхая).

  Ну если вы были первыми, и в то время, наверное единственным лицензионным владельцем DB, то вас наверное пробовали "использовать" :-) для продвижения DB в СНГ? Сам я бы так и делал! :-))

  В 2001 году Бамбер нанял Рика Ванера чтобы он занимался продвижением языка на рынки других стран. Где-то в апреле 2001 он предложил мне стать распространителем ДБ по СНГ. Могу скинуть копию переписки с Ванером по этому поводу : ) Ох и запугал же я его тогда пиратами. Вообщем я отказался от предложения, поскольку, честно говоря, оно мне нафиг не надо было. Я для удовольствия кодил игрушки и тогда уже перешел в статус пасивоного наблюдателя на форуме и отошел от активной деятельности в DB community. Условия в предложении Ванера были простейшими все заказы идут через них, а я записываю и рассылаю диски с ДБ заказчикам, а так же оказываю техническую поддержку на русском языке. Бабки 50 на 50%. Все эти сказки про дорогую лицензию для МедиаХауза на распространение ДБ по СНГ бред.

  Вот! Это моя любимая тема для разговора: "МедиаХауз и поддержка пользователя". :-))

  Кстати руссификация моей английской версии еще задолго до МедиаХауза заняла у меня 3 дня. Вся руссификация состоит в переводе собщений Дарка, которые прописаны в текстовом файле. Какие такие огромные затраты они потратили на руссификацию я не знаю.

  А как попала ваша игра на диск с DarkBASIC-ом?

  В первых числах сентября 2001 года со мной связался Новиков из МедиаХауз. Я так понимаю по наколке Р.Ванера. Новиков попросил разрешение на размещение Любви101 на диске с ДБ и вообще попросил написать мое мнение о языке. Что я с удовольствием и сделал. Вообще Новиков очень приличный и образованный человек на мой взгляд. Тогда же я и предупреждал МедиаХауз о том, что в английской версии невозможно вводить русские буквы через оператор INPUT - они почему то к этому не прислушались.
  Вот и вся история если коротко.

  Спасибо за интересную беседу! :-)




Впечатления! от CloneSoft.

  Из переписки. Но думаю интересно будет всем! ;-) Сразу отвечу на пару замечаний, из этой статьи. Во-первых, повторялись статьи для новых подписчиков моей рассылки (я даже выпуск "пометил" соответствующим сообщением) ибо кол-во подписчиков возросло более чем на 200% благодаря maillist.ru. Во-вторых, я бы не назвал это рекламой посторонней проги, т.к. я хотел поделиться впечатлением от нее. И если получилось как реклама, я не виноват - виноваты авторы этой замечательной программы! ... Ну вот, опять получилось как реклама. :-)) В-третьих, срочно свяжитесь и лучше по телефону, с МедиаХаусом по поводу некондиционной документации к DB. У меня с докой все в порядке!

  Приветствую тебя, многоуважаемый Илья, борца с пиратством (нет я серьезно, правильно делаешь) и неустанного популяризатора DarkBASIC.

  Я обещал поделится впечатлениями о DB? Вот, делюсь. Но сначала благодарности.
  1. Огромное спасибо за помощь и моральную поддержку при покупке DB ;-). Болеро - суппер-пуппер. Извинились за доставленное неудобство и 27.07.2002 выслали. Получили 08.08.2002!
  2. Спасибо за то что ты неустанно работаешь над сайтом и рассылкой. Здесь хочется пожелать побольше профессионализма. И более направленной направленности :-). Это я к тому, что в двух новых рассылках, инфы о DB было мало (рады что будет русская DB 1.13, но где ты это узнал? Сайт как молчал так и молчит.) зато много повтора и реклама совершенно посторонней проги. Узее надо, все же тематика сайта и рассылки такая (твои слова).

  ВПЕЧАТЛЕНИЯ.

  Критика. Стоило покупать лицензионную версию или нет? Ответ - и да и нет :-)

  Ну смотри сам - какое число идет после 108? Правильно, 109. А вот ребятки из МХ изобрели свою математику - в мануале счет страниц идет так - 108:127 (!).
Причем это не цифры перепутали, а не хватает страниц!!! (не вырваны). Вот тебе и лиценз. У тебя так же?

  Теперь про второй диск. Интервью класс! Особенно понравились мне Питер Молинье (DK, B&W) и Луис Касл (Westwood). Вот только оцифровка/сжатие видео: Не иначе как имбецил постарался.
  Утилиты. 3D Exp. - ВЕЩЬ! Остальное - детский набор. А ACDSee и WinRAR у нас и без МХ самые свежие стоят.
  Демки. Некоторые очень даже ничего. Я не о качестве графики, это дело художников, а о прогах. Но все это любительщина. Видно что профессионалами тут и не пахнет. Программировать не умеют, систему и DX не знают - отсюда тормоза и глюки.
  Так что Lee может гордится своим творением. При всех этих кривых руках Dark'у удается:
  Движок Dark'а не самый быстрый и передовой, но умеет очень многое. Этого достаточно для создания весьма неплохой игрушки.
  Например, нам понравилась реализация всех типов проверки на пересечение и прозрачность. Сколько сотен строк кода надо на VB (и еще больше на C) чтобы написать что-то похожее? А тут, пожалуйста.
  Понравилась стабильность и легкость DB в обращении с системой и DX. Не каждый коммерческий движок может этим похвастаться.
  В общем, после ознакомления со всеми функциями DB становится ясно, что прогу делали люди, шарящие в создании игр.
  В нем есть все необходимые функции. Ознакомившись с ними, мы удивились тормознутости многих игр на DB - оказалось виноват не DB, а как обычно - кривые конечности.
  Движок DB очень хорошо заточен под out-door игры, т.е. ландшафтные. BSP в нем и не пахнет. А малограмотные чуваки пытаются сварганить на нем шутеры (FireWorks). Делают, а потом удивляются, что это у них все тормозит и глючит. И конечно же виноват DB, а не они. Надо сначала BSP движок состряпать, потом редактор уровней под него: Хотя, за бугром уже появились профессиональные разработки, но исходниками не делятся. :-(
  Родной редактор DB - муть детская. Спасибо DarkEDIT дали.

  НЕДОСТАТКИ.

  3D движок DB слаб. Нет скелетной анимации. А фреймовая катит только для механизмов (хотя в GTAIII неплохо смотрелась:). *.X - ну это же: Больше надо форматов, больше: Ограничение - 7 (!) источников света! Ну как тут состряпать захватывающий дых шутер в стиле noir? Отсутствует поддержка динамических теней.
  Вроде бы все.

  ОДИН, НО ВЕСОМЫЙ АРГУМЕНТ В ПОЛЬЗУ DB.

  Нет, ну бывают в жизни приколы! На всех полках валяются диски с игрой Lococomotion (так кажется) - издатель 1С. И тут я узнаю что сие творение сработано на DB. WOW! И енто есть очень карашо.

  ВОПРОС.

  Илья. Немного полазил на официальном форуме (ну ты в курсе). Вижу, все задают вопросы, как сделать то, как это. Ну думаю вопросы как вопросы. А когда ознакомился с дисками DB и мануалом у самого возник вопрос: А КТО НИБУДЬ КРОМИ НАС И ТЕБЯ КУПИЛ ЛИЦЕНЗИОННЫЙ DB?
  Это я к тому что или как обычно наш российский человек книжек не читает, а предпочитает осваивать методом тыка или читать нечего ибо пользуется демой. ВЕДЬ В МАНУАЛЕ И НА CD ЕСТЬ ВСЕ ЧТО СПРАШИВАЮТ В ФОРУМЕ!

  ЗАКЛЮЧЕНИЕ.

  В общем и целом :-) DB - вещь. И мы не медля переводим разработку текущей игры на DB!

  С уважением от всей команды CloneSoft и меня лично.
  David Good.


Вся правда о DB Pro от David Good.

Никакой рекламы, только голые факты.

ОБЩЕЕ

1.Оптимизирован 3D и 2D двигатель. Теперь это 60-70 fps на PIII 850 MHz! Вот только не говорится сколько в этот момент на экране полигонов и эффектов. Но я им верю.

2. Детский редактор заменен на профессиональный (оконный в среде Windows) по типу Ms VB 6/7. В редакторе: Улучшены средства отладки програмы, добавлена фича Step как в VB.

3. Расширен язык. Помимо улучешенной поддержки DLL добавленны новые типы данных и в том числе очень нужные Byte и Boolean. И еще что-то. Шифрование файлов от ламаков и пиратов. И многое др.

3D двигатель (ща обалдеете)

1. Как известно (а кому то и нет), движок DB заточен под out-door игры. В DB Pro нам позвольт делать шутеры. Т.е. добавлена поддержка BSP (отсечение невидимых комнат), Деревьев (то же, но продвинутее)и PVS (то же метод оптимизации для room игр). И наконец: СКЕЛЕТНАЯ АНИМАЦИЯ!!!!! А в DB мы имеем только фреймовую (кстати отсюда у многих ламеров проблемы с разваливающейся анимацией) которая катит только для техники. В DB Pro нам позволят напрямую манипулировать векторами и матрицами (речь не о матрицах DB которые на самом деле terrains). К стати, эти матрицы/terrains тоже оптимизированы и добавлено несколько новых функций. Оптимизирован и улучшен полигональный алгоритм проверки на пересечение (в DB, кстати, есть все виды - кубическая, сферическая и полигональная и я не пойму что енто у вас там за траблы такие по энтому вопросу).

2. Новые эффекты: Bump (wow!). Тени (yes!). Истинные отражения (а не те в DB что мы получали путем различных ухищрений). Поддержка истинного маппинга неба (а то некоторые, пардон, дятлы нагружают DB полигонным шаром - детский сад) - Среда, Сфера, Куб (тем кто врубается, должно быть интересно). Поддержка всех типов мультитекстурирования (в DB один самый первый и простой метод). Поддержка Пиксельных и Вертексных шейдеров!!! Такое я видел пока только в движке DOOM III !!!!! Теперь вы легко создадите истинную радугу, объемный туман, шерсть животного, истинные тени - все как в 3D MAX только в реале! Правда для этого нужен GF4. Ну и в заключении о эффектах - добавлен генератор партиклов! Многие написали его сами, на DB, но в DB Pro он родной, на С++, а посему быстрее... намного быстрее.

НОВЫЕ ФОРМАТЫ

С приходом BSP и СКЕЛЕТНОЙ АНИМАЦИИ расширился набор поддержвиваемых форматов.

1. Теперь вы можете создавать уровни для своей игры в моем любимом редакторе от VALVE - WorldCraft. Это BSP уровни. А так же вы уже можете грузить готовые уровни из игр Half-Life, Квака 2 и 3!!!!!!!! WOW!

2. MDL (анимированные модели семейства Half-Life), MD2 (Квака 2), MD3 (Третья Квака). 100 раз WOW! Модели будите делать в максе, а потом конвертить такой классной вещью как MilkShape 3D ($30). Хотя, может, Бамбер даст нам что-то свое.

3. В аудио никаких нововведений т.к. ничего лучшего чем wav и mp3 человечество не придумало. Хотя, добавили формат SGT. Это то же что и MIDI только с доп. инфой благодаря которой ваша прога может делать что-то в такт музыке. Ну, тип. того.

4. В видео - добавлен формат mpeg. Енто будет по качественнее и надежнее чем avi со своими глючными кодеками.

Заключение. Как видим, уважаемый Ли Бамбер открыл для себя истину которую я знал давно - детишки не хотят писать проги они хотят играть в конструктор. Бамбер дал им этот конструктор - 3D Game Maker, а DB поставил на путь истинный - для профи. За бугром sharewar'щики уже вовсю косят капусту от игрушек написанных на DB (знаю из переписки с данным контингентом).




Основы программирования.

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

4. Вид от третьего лица

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

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

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

     Rem Создаем сферу
     Make object sphere 10,50

     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 Устанавливаем положение игрока и сохраняем его в переменных 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#,100,cZ#

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

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

     Loop

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

        X# = Object position x(10)
        Z# = Object position z(10)

Команды "Object Position X" и "Object Position Z" похожи на команду "Object Angle" за исключением того, что они возвращают не угол поворота объекта, а положение объекта в относительных координатах. В скобках ставится номер объекта, координаты которого нужно получить. Значения координат сохраняем в переменных X# и Z#.

        cZ# = Newzvalue(Z#,aY#-180,100)
        cX# = Newxvalue(X#,aY#-180,100)

Команды "NewZValue" и "NewXValue" помогают вам избежать сложных математических функций, таких как синус и косинус. Они вычисляют новое положение объекта на основании старого. Мы используем эти команды, чтобы вычислить точку, находящуюся в 100 единицах пространственных координат позади объекта "Игрок". Первый параметр - это относительная координата, в которой расположен игрок в данный момент. Помните, что мы сохранили положение этого объекта в переменных X# и Z#. Второй параметр - угол оси новых координат. Мы взяли значение вертикального угла объекта, сохранили значение в переменной Y# и вычли из него 180 градусов. Этот угол направлен точно за объект. Третий параметр обозначает точку, удаленную от объекта на указанное количество единиц пространственных координат. Мы задали значение 100. Другими словами, мы сделали следующее: нашли точку, находящуюся позади объекта "Игрок" и удаленную от него на 100 единиц, и сохранили ее координаты в переменных cZ# и cX#, обозначающих положение нашей камеры.

        Position camera cX#,100,cZ#

Команда "Position Camera" работает так же, как и команда "Position Object", за исключением того, что не нужно указывать номер объекта - только значения координат. Для координат X и Z мы используем вновь созданные значения, а для координаты Y - значение 100. Поскольку вертикальная координата Y объекта-игрока равна 0, а его радиус 50, значение 100 координаты помещает камеру над объектом.

        Point camera X#,50,Z#

Наша камера направлена поверх объекта-игрока. С помощью команды "Point Camera" мы направим камеру на объект. Параметры этой команды - это координаты X, Y и Z той точки, на которую нужно направить камеру. Мы используем переменные X# и Z#, хранящие значения положения объекта по осям X и Z. В качестве значения по оси Y будем использовать 50. Теперь камера направлена в центр нашего объекта-игрока.

  Попробуйте изменить количество повторений цикла, чтобы создать больше кубиков. Не забудьте поменять номер объекта-игрока, чтобы это число было больше, чем число кубиков, иначе программа выведет сообщение об ошибке "Объект уже существует".
  В командах "NewXValue" и "NewYValue" попробуйте поменять значение 180 на другое, меньше 360, чтобы посмотреть, как оно влияет на положение камеры. Измените также последний параметр в этих командах, чтобы переместить камеру ближе или дальше к объекту.
  Попробуйте изменить значение 50 в команде "Point Camera", чтобы изменить высоту камеры.


5.Обнаружение столкновений

Цель урока: объяснить, как обнаруживать столкновения.

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


6.Текстурирование объектов

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

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

   Rem Загружаем текстуры
     Load image "cottag02.bmp",1
     Load image "barry.bmp",2

   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
         Texture object x,1
     Next x

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

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

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

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

        If Leftkey()=1
            Yrotate object 10,Wrapvalue(aY#-5)
        Endif

        If Rightkey()=1
           Yrotate object 10,Wrapvalue(aY#+5)
        Endif

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

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

      Rem Получаем новое положение камеры и сохраняем его в cZ# and 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 Прокручиваем текстуру на кубических объектах
        Scroll object texture 1,0.005,0
        Scroll object texture 2,0,0.005

      Rem Масштабируем текстуру на кубических объектах
        Scale object texture 3,0.998,0.998
        Scale object texture 4,1.001,1.001

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

     Loop

В этом уроке мы научимся текстурировать объекты. В DarkBASIC текстуры загружаются из файлов растровых изображений с расширением ".bmp". Советуем создавать текстуры с размерами кратными степени 2, так как некоторые графические карты не могут обрабатывать текстуры, размеры которых выражены нечетными числами и не кратны степени 2. Это означает, что размеры ваших изображений должны быть 256x256, 32x128, 256x16 или любых других размеров кратными степени 2. Можно загружать текстуры и большего размера, чем 256x256, но в этом случае убедитесь, что ваша графическая карта может обрабатывать такие большие текстуры.

       Load image "cottag02.bmp",1
       Load image "barry.bmp",2

Команда "Load Image" дает DarkBASIC указание загрузить изображение из файла растрового изображения. Первый параметр команды - это имя загружаемого файла растрового изображения. Имя файла нужно заключить в кавычки, иначе произойдет ошибка. В этом параметре можно использовать имена каталогов, например, "C:\Darkbasic\Images\mybitmap.bmp". Если вы храните изображения в подкаталоге проекта, в параметре необходимо указать его имя. Мы советуем создавать отдельный подкаталог, если в вашей программе много мультимедийных файлов. Второй параметр - это уникальный номер (или идентификатор) изображения, который используется так же, как при создании объекта. Нельзя присваивать один и тот же номер двум разным изображениям.

       Texture object x,1
       Texture object 10,2

Эти две строки стоят перед основным циклом. Первая строка находится в теле цикла "For Next" и служит для создания кубических объектов. Вторая внесена после того, как мы создали объект "Игрок". Команда "Texture Object" предназначена для наложения изображения на объект. Первый параметр - номер объекта, на который нужно наложить текстуру. Второй параметр - номер накладываемого на объект изображения.

       Scroll object texture 1,0.005,0
       Scroll object texture 2,0,0.005

Команда "Scroll Object Texture" перемещает (прокручивает) наложенную на объект или полигон текстуру вверх и вниз или вправо и влево. Первый параметр - номер объекта, чья текстура будет прокручиваться. Следующие два параметра - это U и V координаты. Вы можете представить их как координаты X и Y двумерной текстуры. Если присвоить этим параметрам значения, отличные от 0, текстура будет прокручиваться при каждом вызове этой команды. Можно использовать как положительные, так и отрицательные значения, в зависимости от того, в каком направлении вы хотите прокрутить текстуру на объекте. В нашем примере используется очень маленькое значение с плавающей точкой. Значения прокрутки U и V можно представить как процент от размера текстуры. Если бы мы установили значение, равное "0.5", что означает 50 процентов, текстура на кубе передвинулась бы ровно наполовину, а это - слишком быстро.

       Scale object texture 3,0.998,0.998
       Scale object texture 4,1.001,1.001

Команда "Scale Object Texture" похожа на предыдущую, только эта команда увеличивает или уменьшает масштаб текстуры на объекте. Первый параметр - это номер объекта, текстура которого изменяет масштаб (масштабируется). Следующие два параметра являются U и V координатами текстуры. Изменение этих значений на любую величину, кроме 0, увеличит или уменьшит размер текстуры. Когда эти значения равны 0, никакого изменения размеров не произойдет. Если присвоить параметрам значение меньше 1, масштаб текстуры уменьшится, и наоборот, если присвоить им значение больше 1, масштаб текстуры увеличится.

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

Измените значения U и V в команде "Scroll Object Texture", чтобы посмотреть, как это повлияет на скорость прокрутки текстур объектов.
Измените значения U и V в команде " Scale Object Texture", чтобы посмотреть, как это отразится на масштабе текстур.




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

  Тут меня спросили :-) зачем я поместил в данной рассылке свои рецензии на программы, не относящиеся к теме. Я думаю все логично. Посмотрите: после установки программы Aston, описанной в прошлом номере, я заметил, что Windows работает быстрее, это отразилось и на моменте запуска и выхода из программ на DarkBASIC-е. А AltDesk-ом удобно пользоваться, например при написании своей игры на работе. :-) У меня на одном экране запущены все проги "по работе", а на втором все проги "по игре". :-) Ну и так делее... :-))
  Продолжает тему рубрики не менее полезная программа AltDesk ...

    AltDesk - менеджер виртуальных экранов для Windows 9x/NT/Me/2000/XP с поддержкой скинов. AltDesk расширяет функциональные возможности рабочего стола Windows. Он позволяет создавать до 81 виртуальных экранов. Интерфейс программы изменяется в зависимости от выбранного скина.
    Если Вам не хватает места на рабочем столе, то это программа для Вас!

    Написана авторами Aston-а. Самостоятельная программа, но лучше всего смотриться совместно с Aston-м, я именно так и сделал: установил Aston и AltDesk - очень гармонично. Гибкая настройка "окошек" отображающих содержимое виртуальных экранов (см. фотки), "горячие клавиши" для переключения между виртуальными экранами. Не грузит процессор и память. Глюков замечено не было, работает чрезвычайно устойчиво! Класс! "Чмок" в иконку! :-)) Стоит всего 100 рублей, но вы можете бесплатно ей пользоваться 30 дней. Скины на сайте. Русский интерфейс + русская документация. Для любителей - всё то же самое есть на английском...

Скин, для внешнего вида ''окошек'' виртуальных экранов. Можно и так...


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


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