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

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

  Все выпуски  

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


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


Рассылки Subscribe.Ru
Старые игры
Номер 6/июль 2002
От редактора

  Нас теперь 116 человек! Это общее количество подписчиков рассылки. :-) Меня, как автора, это очень радует. Все таки не зря отрываю время от основной работы. :-))

  Информация для новых подписчиков! Если вы "не врубаетесь" о чем идет здесь речь - посмотрите предыдущие номера рассылки. И вам станет интереснее!

  Продолжается цикл уроков по созданию своей игры.

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

  Решил помесить здесь одно письмо и вот по какой причине: в последнее время, очень часто стали возникать подобные вопросы в форумах, да и по электронной почте пишут тоже... Честно сказать я не знаю что отвечать. Я не имел опыта работы в 3D MAX-е... Предлагаю обсудить эту тему. Если среди вас есть человек, знающий 3D MAX или вы занимались созданием 3D-моделей - поделитесь опытом в решении описанной ниже проблемы! Напишите мне!
  Здравствуйте Илья. При создании своей игры у меня возникло несколько трудностей, которые я не знаю, как решить.
  При написании своей игры, конечно, мы используем свои модели. Так вот, дело в том, что когда я использую свою модель в игре, то она отображается некорректно. Пропадают или путаются текстуры, а ее элементы часто "наезжают" друг на друга. Хотя при открытие файла с моделью в 3D MAX все отображается нормально.
  Вторая проблема заключается не в самом DarkBasic. Дело в том, что я больше программист, а не моделлер и поэтому знаю MAX только поверхностно. Поэтому и возникла проблема с анимацией моделей. Точнее не с ней самой, а с ее экспортом в 3ds файл. Я думал, что при экспорте проанимированной модели достаточно нажать на File->Export->3ds, но так ничего не получается. MAX экспортирует модель без анимации.
  Я надеюсь, что как человек, который уже что-то написавший на DarkBasic вы сможете помочь мне разобраться с этими вопросами. Заранее спасибо. С уважением, Агуреев Дмитрий.

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


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

      1. Новости.

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

      3. Вопросы и ответы.

      4. Секреты программирования игр




Новости

  DB Pro закончен и отправлен в тираж! А официальный сайт по DarkBASIC Professional заработал на полную "катушку". Работают все ссылки, раньше можно было перейти только на страничку предварительного заказа.
  Все возможности профессиональной версии, вы можете прочитать здесь на английском языке. Вот некоторые из них: поддержка шейдеров (шейдеры "есть" у Geforce4 Ti, хотя еще у кого есть?); кроме матриц еще появились и "Продвинутые Земли" (Advanced terrain); поддержка множества камер одновременно (в DB у вас есть только одна камера); мультиплеер (многопользовательская игра с помощью локальной сети или Интернета); "заточен" и под последнюю операционку Windows XP, теперь вы работаете не с одним файлом, а с проектом (Project manager); закодирование и сжатие EXE-файла при финанльной компиляции вашей игры; иконку вашей игры можете легко менять; компиляция в 100% машинный код (сейчас DB компилирует ваш исходник вместе с интерпретатором, поэтому и получаются файлы больше мегабайта); пошаговая отладка и выполнение вашей программы; поддержка игровых уровней Quake 2 Map, Quake 3 Map, Half Life Map; поддержка DVD. Ну и так далее... :-)
  26 июля 2002 года планируют открыть "Галерею DarkBASIC Profssional".

  Вот вам несколько скриншотов с DB Pro. Советую обратить внимание на качество графики и количество fps.




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

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

УРОК 7
МУЗЫКА И ЗВУК

Цель этой программы - продемонстрировать, как нужно загружать звуковые и музыкальные файлы и воспроизводить их. Кроме того, программа показывает, как с помощью команды SCANCODE обнаружить, какие клавиши нажаты на клавиатуре, а также дает представление об обработке многоканального звука в DarkBASIC.

rem Загрузить музыкальный файл
LOAD MUSIC "sample.mid",1

rem Загрузить звуковой файл
LOAD SOUND "sample.wav",1
LOAD SOUND "sample.wav",2
LOAD SOUND "sample.wav",3

rem Начало воспроизведения музыки
LOOP MUSIC 1

rem Начало цикла
DO

  rem Нажатие клавиши 1 воспроизведет звук 1
  IF SCANCODE()=2 AND SOUND PLAYING(1)=0 THEN PLAY SOUND 1

  rem Нажатие клавиши 2 воспроизведет звук 2
  IF SCANCODE()=3 AND SOUND PLAYING(2)=0 THEN PLAY SOUND 2

  rem Нажатие клавиши 3 воспроизведет звук 3
  IF SCANCODE()=4 AND SOUND PLAYING(3)=0 THEN PLAY SOUND 3

  rem Конец цикла
LOOP

Команда LOAD MUSIC загружает музыкальный файл в формате MIDI под номером 1. Можно загрузить много музыкальных файлов, но воспроизводить можно только один. Команда LOAD SOUND загружает один и тот же звуковой файл под номерами 1, 2 и 3. Это делается для того, чтобы создать несколько звуковых каналов, которые для лучшего звучания перекрывают друг друга. Команда LOOP MUSIC воспроизводит музыку циклически. Команда SCANCODE() возвращает значение кода опроса текущей нажатой клавиши. Команда SOUND PLAYING() возвращает 1, если воспроизводится звук, в противном случае она возвращает 0.

Заключительный шаг. Контрольные задания:

1. Измените программу так, чтобы музыка останавливалась, если воспроизводится звук.
2. Измените программу так, чтобы музыка воспроизводилась, если нажимается клавиша М.
3. Измените программу так, чтобы увеличить количество взрывов с трех до пяти.

УРОК 8
ДВИЖУЩИЙСЯ СПРАЙТ

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

rem Загрузить последовательность изображений персонажа в скрытое растровое изображение
LOAD BITMAP "runner.bmp",1

rem Выделить изображение для анимации персонажа
FOR y=0 to 1
  FOR x=0 TO 6
    GET IMAGE 1+x+(y*7),(x*89),(y*120),(x*89)+89,(y*120)+120
  NEXT x
NEXT y

rem Удалить растровое изображение
DELETE BITMAP 1

rem Присвоить значения переменным пользователя
xpos=0
ypos=300
image=1

rem Включить синхронизацию
SYNC ON

rem Начало цикла
DO

  rem Бег вправо до конца экрана и переход на новую строку
  xpos=xpos+6 : IF xpos>640 THEN xpos=-64

  Rem Анимировать спрайт
  image=image+1 : IF image>12 THEN image=2

  rem Обновить спрайт
  SPRITE 1,xpos,ypos,image

  rem Теперь обновить экран
  SYNC : SLEEP 20

  rem Конец цикла
LOOP

Первая часть программы загружает анимированную последовательность растрового изображения в изображение 1. Изображения под номерами 1 - 32 находятся вне экрана и невидимы. Анимированная последовательность растрового изображения - это обычный файл формата .BMP с сеткой последовательных изображений, которые создают эффект анимации при их поочередном выводе на экран. Цикл FOR NEXT используется для извлечения отдельных изображений из последовательности. Растровое изображение затем удаляется из памяти, так как в памяти теперь надежно сохранены нужные изображения.

Вторая часть программы присваивает значения переменным и подготавливает вхождение в основной цикл. Команда SYNC ON информирует систему, что программа берет на себя обновление экрана. Это делается, чтобы обеспечить плавное, управляемое обновление частоты экрана. Если бы мы пропустили эту команду, то программа была бы выполнена настолько быстро, что вы едва ли смогли бы увидеть спрайт!

Основной цикл начинается с увеличения двух переменных. Обеим определены максимальные значения, при превышении которых переменным присваиваются исходные значения. Команда SPRITE выводит на экран спрайт 1 с последними указанными значениями координат и изображения. Переменная XPOS обеспечивает передвижение спрайта по экрану. Переменная IMAGE последовательно меняет значение изображения, при этом смена кадров приводит к анимации спрайта.

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

Заключительный шаг. Контрольные задания:

1. Измените программу так, чтобы поместить изображение ближе к верхней части экрана.
2. Измените программу так, чтобы спрайт двигался быстрее.
3. Измените программу так, чтобы анимация воспроизводилась медленнее, но не замедлялось движение вниз.




Вопросы и ответы.

  Ничего не могу ввести по-русски с помощью оператора INPUT! Кто знает в чем проблема помогите, пожалуйста! Хочу уточнить, что русский текст, например, с помощью оператора PRINT на экран выводится спокойно, не работает имеено INPUT. Т.е. по-английски все вбивается спокойно, а когда переключаюсь на английский, курсор просто стоит на месте.
  Вообще то подобная "фича" была в английской версии ДБ. Честно говоря удивлен, что в русской версии этот баг так и не исправлен. Варианты решения проблемы:
1) Купи дополнительный пакет DarkMatter, там введена поддержка дополнительных языков и русский текст вводится без проблем.
2) Напиши собственную процедуру ввода (как сделал это я) с помощью inkey$

  Если можно то как сменить, скажем, иконку у исполняемого файла?
  С помощью программы Resource Hacker или Microangelo :)

  Возможно ли средствами DB делать следующее, подозреваю, что нет: Полусфера. Точка зрения наблюдателя (камера) в фокусе сферы. внутренняя поверхность состоит из 6-7 лепестков. Цвета лепестков меняются программно. Сфера может вращаться программно.
  Сделай в 3DSMax полую полусферу, раздели на сколько тебе нужно лепестков, так чтобы каждый лепесток был отдельным объектом. !Проверь чтобы каждый лепесток окрашивался с обеих сторон!. Сохрани в формате 3DS. Потом в DB загрузи ее Load Object "poluspehre.3ds",Номер объекта С помощью команды (Color Limb Номер объекта, Номер лимба, Значение цвета)раскрась лепестки как хочешь. Надеюсь что-такое лимб ты знаешь. Саму полусферу можешь поворачивать как угодно через Rotate Object Номер объекта, X,Y,Z.

  Чем отличаются спрайты и бобы ?
  Ни чем не отличаются. Просто до версии 1.03 они назывались "бобс", потом их переименовали в спрайты, а "бобсы" оставили для совместимости...

  Объясните плз почему мигает экран при выходе из редактора в окно просмотра.
  Та же самая проблема и у меня, но решается это легко! Вставь в начало кода команду cls (очищает экран) - и все проблемы с миганием решатся

  А возможен ли вызов функций написанных на DB из другого языка? Тоесть использование DB как графического движка , а все остальное написано на другом языке?
  Реализовано в версии 1.13. В версии 1.09 не реализовано, в русской версии в том числе.
------------------------------------
Можно вызывать прогу написаную на ДБ (exe файл я имею ввиду) при помощи EXECUTE, параметры при этом можно передавать 2 способами: 1) через ком.строку ( CL$() ) 2) через буфер обмена (посмотри по Хелпу, на вскидку не помню).
--------------------------------------
Можно обратится с командной строки к самому редактору с параметрами: Compile -c Execute -x Make exe -b Build Final -f

  Как можно записать в файл положение всех обьектов.
  Насчет сохранения оъектов, ты должен сам позаботиться о том, чтобы при создании каких либо объектов, заносить в массив данные о местоположении объекта, его свойствах и если этот объект создан из файла, то также данные о пути к нему, его текстурам и данным анимации. Потом например с помощью команд
open to write 1,"File.map"
for i=1 to 65535
  if object exist i
    write file 1,массив(номер объекта)
    write file 1,массив2(тип объекта)
    write file 1,массив3(положение объекта)
    write file 1,массив4(свойства объекта)
    write file 1,массив5(путь к объекту, если он создан из файла)
    и так далее
  endif ...
next i

  Как сделать библиотеку обьектов. в одном файле а потом загружать тот обьект которй нужен?
  С помощью команд: Read fileblock, Read dirblock, Write fileblock, Write dirblock. Записываешь в один упакованный файл файлы с объектами, текстурами и т.п., и еще один файл который описывает все объекты в библиотеке

  Подскажите пожалуйста,как мне ввести информацию с LPT порта компьютера для ее дальнейшего использования при разработке игры.Если для этого нужно писать подпрограмму на Ассемблере,то как ее включить в ДБ?
  В дополнительной примочке DarkMATTER к DarkBasic, имеется поддержка внешних библиотек DLL, через них возможно ты сможешь обращаться напрямую к устройствам I\O. Но пока нет версии, которая ставиться на русскую локализацию DarkBasic.
Вызовы функций в DLL-ках реализовано в версии 1.13

  У меня УЖЕ есть файл. Из готового файла надо данные брать, а он большой.
Rem * Title : Large_File_Scanner
Rem * Author : Kevin Picone
Rem * Date : 1,feb,2002
` *=---------------------------------------------------------------------=*
`
` >> Large File Scan To Cache Example V0.01 <<
`
` By Kevin Picone
`
` 1st, Feb, 2002
`
` (c) Copyright 2002, By Kevin Picone, All Rights Reserved.
`
` *=---------------------------------------------------------------------=*
` Email: picone@centercom.com.au URL: www.uwdesign.50megs.com
` *=---------------------------------------------------------------------=*
`
` So WHAT does this do ?:
` =======================
`
` This example lets the user process larger files than what DB can handle and
` in memory.. The concept is simple, it spools '128k segments' from the
` larger file into memory, so you can then perform any chances to this
` segment can save it again..
`
` I've tested this with 1, 8 and 16 (ish) meg files. The larger files took
` about a 50 seconds to scan, which is about 2 minutes if you include
` saving..
`
` Notes:
` ======
`
` When loading large chunks of data from the disc, it's always best to
` load LONG's rather than words/bytes. IT just makes more sense to grab
` bigger chunks of data, than smaller ones. This avoids the 'time outs'
` in loading from the spinning media (think about it :).. Hopefully,
` Db pro will have random access support for files..
`
` Bugs.
` =====
`
` While this code has been tested somewhat there still might be some errors
` in it. If you find something odd, don't panic email me.. :)
`
` Free License Agreement.
` =========================
`
` * The user / developer agrees to NOT offer this source code for Sale.
`
` * Providing the User / Developer agrees in full to the previous FREE
` license Agreement clauses, the user / developer may use this Source
` code FREELY in all their products, commercial or otherwise.а
`
` Cya,
` Kevin Picone
` picone@centercom.com.au
` www.uwdesign.50megs.com
` www.thedrummachine.50megs.com
` pub101.ezboard.com/buwdesignа (uwdesign forum)
`
` *=---------------------------------------------------------------------=*
`
Sync on
Sync rate 0
` Set Cache to 128K blocks
` -----------------------
CacheSize=2^17
CacheMask=CacheSize-1
Dim FileSectionCache(CacheSize)

LoadingFilenumber=1
LoadingFilename$="testdata.zip"
` LoadingFilename$="testtextfile.txt"
` LoadingFilename$="mappy.zip"

` Get the Size of the file to process
` -----------------------------------
FileSize=file size(loadingfilename$)
Print Filesize
LoadingTimer=0

` OutPut FILE INfo
` ------------------
SavingFilenumber=2
SavingFilename$="testdata_Saved.zip"

` Check if the output exists if so delete it..
` ---------------------------------------------
If File exist(savingFilename$) then delete file savingfilename$
TotalTimeStart=timer()
Open to read loadingfilenumber,loadingfilename$
Open to write SavingFileNumber,Savingfilename$
FilePosition=0
repeat
Print "Reading Section:";fileposition;
SectionLen=FileSIze-Fileposition
if sectionLen>CacheSize then SectionLen=CacheSize

` Read This Segment to the Cache Array
` -------------------------------------
ts=timer()
Spool_FileSection_To_Cache(LoadingFilenumber,SectionLen)
te=timer()
Print " Section Loading Took;";te-ts;

` Here you could apply whatever Processing you wish to the
` Array In memory.
` --------------------------------------------------------
` Test Write Speed and DUMP the File sectin out (as is)
` -------------------------------------------------------
Print " Saving section"
Spool_Cache_TO_File(SavingFilenumber,SectionLen)

` Cacl the Total Loading time, not including saving
` --------------------------------------------------
LoadingTimer=LoadingTimer+(te-ts)
FilePosition=FilePosition+CacheSize
sync
until FilePosition=>FileSize

` Close the two files
` --------------------
close file Loadingfilenumber
close file Savingfilenumber
TotalTime=timer()-TotalTimeStart

` Display the Total Time the loading Took (does not include save time)
` ---------------------------------------------------------------------
ink rgb(255,0,0),0
text 450,0,"loading Time:"+str$(LoadingTimer)
ink 255,0
text 450,20,"Total Time:"+str$(TotalTime)
End

` *=----------------------------------------------------------------=*
` Spool File Section To Cache
` *=----------------------------------------------------------------=*
`
` Reads Data from the an open file into the FileSectionCache Array.
`
`
` *=----------------------------------------------------------------=*

Function Spool_FileSection_To_Cache(Filenumber,size)
bytepos=0
Size2=(Size/16)-1
For lp =0 to Size2
  ` Read in LONGs from disc for better performance.
  ` The longs are then split into BYTES in the File Section Cache Array
  read long Filenumber,Long
    Hword=((long&-65536)/65536)&65535
    FileSectionCache(bytepos)=long&255
    FileSectionCache(bytepos+1)=(long&65280)/256
    FileSectionCache(bytepos+2)=Hword&255
    FileSectionCache(bytepos+3)=(Hword&65280)/256
    bytepos=bytepos+4

  read long Filenumber,Long
    Hword=((long&-65536)/65536)&65535
    FileSectionCache(bytepos)=long&255
    FileSectionCache(bytepos+1)=(long&65280)/256
    FileSectionCache(bytepos+2)=Hword&255
    FileSectionCache(bytepos+3)=(Hword&65280)/256
    bytepos=bytepos+4

  read long Filenumber,Long
    Hword=((long&-65536)/65536)&65535
    FileSectionCache(bytepos)=long&255
    FileSectionCache(bytepos+1)=(long&65280)/256
    FileSectionCache(bytepos+2)=Hword&255
    FileSectionCache(bytepos+3)=(Hword&65280)/256
    bytepos=bytepos+4

  read long Filenumber,Long
    Hword=((long&-65536)/65536)&65535
    FileSectionCache(bytepos)=long&255
    FileSectionCache(bytepos+1)=(long&65280)/256
    FileSectionCache(bytepos+2)=Hword&255
    FileSectionCache(bytepos+3)=(Hword&65280)/256
    bytepos=bytepos+4
next lp
Size2=size&15
if Size2>0
  For lp=1 to Size2
    read byte Filenumber,FileSectionCache(bytepos)
    inc bytepos
  next lp
endif
Endfunction

` *=----------------------------------------------------------------=*
` Spool Cache Section To File
` *=----------------------------------------------------------------=*
`
` This function write the cache slab of data to the open WRITE device
`
` *=----------------------------------------------------------------=*
Function Spool_Cache_TO_FILE(Filenumber,size)
bytepos=0
Size2=(Size/4)-1
For lp =0 to Size2
  write long
  Filenumber,(FileSectionCache(bytepos+3)*16777216)+(FileSectionCache(bytepos+2)*65536)+(FileSectionCache(bytepos+1)*256)+FileSectionCache(bytepos)
  bytepos=bytepos+4
next lp
Size2=size&3
if Size2>0
  For lp=1 to Size2
    write byte Filenumber,FileSectionCache(bytepos)
    inc bytepos
  next lp
endif
EndFunction

  Если у вас есть, что дополнить или исправить или подсказать -
не стесняйтесь! :-)




Секреты программирования игр

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

ГЛАВА 1
ВИДЕОИГРЫ, ПЕРВЫЕ ШАГИ ...

  С чего начать? Хочется так много сказать, что невольно придется посвятить этому несколько страниц. То путешествие, которое мы собираемся предпринять в мир разработки видеоигр, можно смело назвать захватывающим приключением. Создание видеоигр можно сравнить с написанием стихов или рисованием картины. Для этого нужно вдохновение, ведь создатель хочет поделиться с окружающим миром частичкой своего воображения. Один великий скульптор сказал однажды: "Статуя была здесь всегда, я просто освободил ее из камня". Это высказывание вполне применимо и к видеоиграм.
  Компьютер - это просто хранилище битов информации и, устанавливая их в 1 или 0, вы создаете образ. В этом заключается искусство. Я хочу, чтобы вы настроились на созидательную работу.Нам потребуется полное взаимопонимание. В этой главе я расскажу о том, как создаются видеоигры. Вы узнаете вот о чем:
    - Кто пишет видеоигры;
    - Откуда берутся идеи;
    - Фазы создания видеоигры;
    - Что вы узнаете из этой книги.
  В следующих главах вы узнаете, как писать игры.

КТО ПИШЕТ ВИДЕОИГРЫ ?

  Видеоигры создаются группами совершенно разных людей. Нас объединяет желание сделать нечто, что заставляет смеяться, улыбаться, в азарте подпрыгивать на стуле. Если вы хотите доставить другим радость, то можете не сомневаться, что видеоигры - это то, что надо! Кроме того, создание видеоигр и нас самих делает счастливыми. Я не думаю, что написание компилятора может сделать кого-нибудь счастливым человеком.
  Видеоигры - это способ выражения самых фантастических идей и образов. Многим просто необходима отдушина для воплощения своих безумных фантазий. Кстати, я думаю, что именно поэтому существует театр и кино. Мы верим в свои иллюзии, порой убегая в них от ужасной реальности. Видеоигры - это такой же способ позволить людям хотя бы на время стать богами своих маленьких вселенных.

ОТКУДА БЕРУТСЯ ИДЕИ ?

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

ФАЗЫ СОЗДАНИЯ ВИДЕОИГР

  Видеоигра, как и любой другой программный продукт, должна создаваться по определенной методике. Это значит, что мы в процессе разработки должны придерживаться определенных правил и рекомендаций. Итак:
    - Во-первых, нужна идея. Мы уже об этом говорили;
    - Если есть понимание того, что будет в игре, то есть смысл написать что-то типа сценария. Если игра будет развиваться на нескольких уровнях - опишите каждый из них;
    - Затем вам надо разнообразить каждый из уровней какими-нибудь неожиданными ходами, целями и т.д. Вы должны заинтересовать игрока, заставить его проходить уровень за уровнем в вашей игре;
    - Если у вас есть понимание каждого уровня игры, то имеет смысл подумать оструктуре самой игры. Как будут себя вести игровые объекты, как они будут взаимодействовать, какие возможности получит игрок?

  В этот момент у вас уже есть достаточно информации, чтобы садиться и начинать писать более развернутый план игры. Теперь попробуйте чуть более заострить свое внимание на специфике игры. Например:
    - Выберите, в каком видеорежиме у вас будет работать игра. Например, она может быть выполнена в режиме высокого разрешения, но использовать при этом только несколько цветов.
    - Подумайте, насколько сложной будет графика. Будет ли она трехмерной или двухмерной.
  О том, как решать эти проблемы вы также узнаете из данной книги.

  Когда вы решите для себя эти вопросы, настанет время подумать о тех средствах созидания, которыми мы располагаем. Попробуйте начать конструировать с максимальной детализацией самый первый уровень. У вас сразу появится необходимость в специальных инструментальных средствах. Вот их минимальный набор:
    - Программа для рисования битовых образов;
    - Программа для анимации битовых образов;
    - Алгоритмы искусственного интеллекта для персонажей игры;
    - Средства для работы со звуком;
    - Код для работы с устройствами ввода;
    - Инструменты для рисования уровней и сохранения их на диске;
    - Набор MIDI-звуков для каждого из уровней.

  Когда вы начнете писать программу, старайтесь разбить ее на маленькие секции. На самом деле программа может быть разбита на следующие куски:
    - Игровой мир и описывающие его структуры данных;
    - Система рендеринга; (Рендеринг - то же, что и визуализация - набор методов вывода изображений на экран)
    - Система ввода/вывода;
    - Система искусственного интеллекта;
    - Основной игровой цикл;
    - Интерфейс пользователя;
    - Система звука.

  
Далее ...


Выпуск закончил 23 июля 2002 года в 13:15 мск


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

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

В избранное