Вопросы и ответы.
Ничего не могу ввести по-русски с помощью оператора 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 мск