Полигон №109
Пятница, 26.04.2024, 17:00
Меню сайта
Категории раздела
Учебники [5]
Учебники по Blitz 3D
Мастер класс [0]
Мастер класс по Blitz 3D
Дополнительные прогрограммы [2]
Статьи о програмах, можно испозовать для упрошения создания игр на Blitz3D.Редакторы Ланшафтов,Уровней,Моделей.
Разное. [1]
Разные интересности связанные с Blitz3D. Проекты сделанные на нем и др.
Инфа
Всего на сайте:
Комментарии: 135
Новости: 3
Файлы: 47
Статей: 36
Теги
Мини-чат
Наш опрос
Сколько у вас проектов(игр,программ)?
Всего ответов: 78
Главная » Статьи » Blitz 3D » Учебники

Учебник по Blitz3d

 
 
 
1. Создания строкового типа данных 
 
  Представьте что вам нужно создать карту 10x10 причем каждая клетка будет содержать несколько параметров. Вот тут то и помогут вам типы. Вы создаете тип с именем TMap в котором будут парматры X, Y, Name$. Теперь объявляете переменную newmap(9,9) типом TMap и чтобы получить доступ к любому из парметров клетки нужно всего лишь использовать newmap(0,0)\X = значение. В blitz типы немного расширены... Допутим вам нужно создать противника типичного которых по игре будет сотни но сколько точно вы не знаете. Вы создаете тип TPlayer с параетрами ... среди них должно быть обязательно Name$. При создании нового противника newplayer обязательно задайте Name... теперь игрок есть даже если вы удалите newplayer он содержится в TPlayer где то среди неограниченных его копий. и чтобы получить доступ к его параметрам нужно вызвать newplayer и найти нужного по Name$. 
Пример объявления: 

Type MyType 
Field x,y 
End Type 
Создает тип 'MyType' с 2 парметрами - x и y. 

Еще один пример: 

Type MyType 
Field x,y 
Field description$ 
Field delta_x#,delta_y# 
End Type 

Теперь чтобы создать переменную или массив вашего типа нужно использовать символ '.' . Пример: 

Global mine.MyType Dim all_mine.MyType( 100 ) 

До того как вы сможете использовать вашу переменную вам необходимо использовать опертор 'New'. Пример: 

mine.MyType=New MyType 

Оператор 'New' создает 'object' типа 'MyType', и возвращает 'pointer' новому объекту. 
Для того чтобы вызвать параметры типа нужно использовать символ '\'. Пример:
 
 mine\x=100 Print mine\x 
 
Уничтожение переменной типа: 
Когда вы закончили работу с типом через переменную используйте комманду 'Delete'. Небойтесь вся информация записана в типе а не в переменной через которую осуществляется доступ. При следеющем вызове типа через какую нибудь переменную у вас о5 появится доступ к ранее записанным данным. Пример:
 
Delete mine 

Специальное слово 'Null' используется для проверки существования объекта. Объект несуществует если ранее не был вызван опертором 'New', или уже был стерт опертором 'Delete'. Пример: 

mine.MyType=New MyType 
If mine<>Null 
Print "exists!" 
Else 
Print "doesn't exist!" 
EndIf 
Delete mine 
If mine<>Null 
Print "exists!" 
Else 
Print "doesn't exist!" 
EndIf 
...на экране появится: 
exists! 
doesn't exist! 

Список типов динамичен и может быть просканирова при помощи множества комманд таких как Each.... 
Слова 'First', 'Last', 'After' и 'Before' позволяют вам работать с листом типа. Опертор 'First' позволяет осуществлять доступ к первому эллементу типа. Пример: 
mine.MyType=First MyType 
Тоже и с остальными оперторами. 
Если тип пуст то выводится 'Null'. 
Еще два опертора 'After' перебирает объекты, и 'Before' перебирает объекты в обратном порядке. 

Пример: 

mine.MyType=First MyType ;mine=first object in the type list 
mine=After( mine ) ;mine=second object 
mine=After( mine ) ;mine=third object 
mine=Before( mine ) ;mine=second object 
mine=Before( mine ) ;mine=first again! 
'After' и 'Before' возвращают 'Null' если тип пуст или объектов дальше нет. Пример: 
mine.MyType=Last MyType ;mine=last object 
mine=After( mine ) ;object after last does not exist! 
Так же можно вставлять опретором Insert в любое место списка. Пример: 
mine1.MyType=New MyType 
mine2.MyType=New MyType 
Insert mine2 Before mine1 
Прмер как вставить новый эллемент в начало списка: 
Insert mine Before First MyType 
Специальная форма For...Next позволяет вам легко проверить каждый эллемент типа в листе. Пример: 
For mine.MyType=Each MyType 
Next 
Наконец, опертор 'Delete Each' Позволит вам удалить все эеллементы из листа типа. Пример: 
Delete Each MyType 
 
 
 
 
2. Анимация объектов

Почти в любой игре вы встречали анимацию, например, бег героев, врагов, вращение винта вертолёта и др. И в Blitz3D существуют специальные команды, которые позволяют воспроизводить анимацию 3D объектов. Анимационные объекты имеют "кадры" или определённые фиксированные координаты отдельных частей объекта в разные моменты времени. Теперь поговорим об анимации объектов различных форматов. У объектов форматов 3DS и X анимируют компоненты, состоящие из примитивов, но не анимируют по вершинам и треугольникам. Но формат MD2 позволяет анимировать по отдельным вершинам и треугольникам, поэтому его используют для анимации персонажей и животных. Загрузка анимационного объекта в формате 3DS и X (при успешной загрузке, переменной возвращается адрес на объект): 

перем=LoadAnimMesh("файл",[родитель] ) 

Воспроизвести анимацию для форматов 3DS и X. Допустимые значения для параметра режим: 1 - однократная анимация, 2 - зацикленная анимация, 3 - воспроизведение вперёд-назад, 0 - анимации нет. Скорость - параметр скорости анимации. Кадр - значение начального кадра. Задержка - пауза перед анимацией: 
Animate перем,[режим],[скорость#],[кадр],[задержка#] 

Функция, возвращающая время анимации объекта: 

AnimTime#(перем) 

Проверка на воспроизведение анимации. Функция возвращает 1, если объект анимирует и 0, если нет: 

Animating(перем) 

Загрузка анимационного объекта в формате MD2. Загружается такой же командой, как и неанимационный объект: 

перем=LoadMD2("файл",[родитель] ) 

Воспроизвести анимацию MD2. Допустимые значения для параметра режим: 1 - однократная анимация, 2 - зацикленная анимация, 3 - воспроизведение впрёд-назад, 0 - анимации нет. Скорость - параметр скорости анимации. Начанльный кадр - значение начального кадра. Конечный кадр - значение конечного кадра. Задержка - пауза перед анимацией: 

Animate перем,[режим],[скорость#],[начальный_кадр],[конечный_кадр],[задержка#] 

Функция, возвращающая время анимации MD2 объекта: 

MD2AnimTime#(перем) 

Проверка на воспроизведение анимации MD2 объекта. Функция возвращает 1, если объект анимирует и 0, если нет:
 
MD2Animating(перем) 

Чтобы воспроизводилась анимация объектов, должна присутствовать в цикле команда UpdateWorld (значение параметра скорость по-умолчанию равно 1): 

UpdateWorld [скорость#] 


3. Столкновение объектов


Созданные объекты при движении не будут взаимодействовать друг с другом, так как не установлены для них столкновения. Объекты будут проходить насквозь друг друга, поэтому чтобы избежать таких ситуаций, используют столкновения. 
Установка режима столкновений. Используется команда Collisions, которая имеет множество параметров. Первый параметр - тип объекта (целое значение от 1 до 999), который будет сталкиваться. Второй параметр - тип объектов (целое значение от 1 до 999), об которые будут сталкиваться. Третий параметр - метод столкновения: 1 - сфера к сфере, 2 - сфера к многограннику, 3 - сфера к кубу. Четвёртый параметр - реакция сталкиваемого объекта: 1 - объект останавливается при столкновении, 2 - объект скользит при столкновении, 3 - объект скользит с трением. Общий вид команды: 

Collisions тип1,тип2,метод,реакция 

Чтобы объекты могли сталкиваться, нужно им применить тип (значение от 1 до 999): 
EntityType перем,значение 

Чтобы работала анимация, в цикле используют (та же команда для анимации объектов): 

UpdateWorld 

Примеры. 
1 метод: метод с остановкой. Создаётся шар и конус. Тип шара - 1, а конуса - 2. В команде Collisions устанавливается первый параметр равен1, т.е. сталкивается объект с типом 1 - это шар. Второй параметр равен 2 - тип конуса, об который будет сталкиваться шар. Третий параемтр равен 2 (сфера об многогранник), лучше использовать такой метод, потому что конус - это многогранник. Последний параметр равен 1, значит, шар при столкновении остановится. 

Graphics3D 640,480 ;3D графический режим 
cam=CreateCamera() ;создаёт камеру 
sphe=CreateSphere() ;создаёт шарик 
PositionEntity sphe,4,0,8 ;позиция шарика 
EntityType sphe,1 ;тип шарика 
cone=CreateCone() ;создаёт конус 
PositionEntity cone,-3,0,8 ;позиция конуса 
EntityType cone,2 ;тип конуса 
Collisions 1,2,2,1 ;устанавливает столкновения 
While Not KeyHit(1) 
MoveEntity sphe,-0.05,0,0 
UpdateWorld ;обновляет анимацию и столкновения объектов 
RenderWorld ;прорисовывает мир 
Flip ;отбражает графический буфер 
Wend ;конец цикла 
End ;выход 

2 метод: метод со скольжением. Пример ничем не отличается от первого, только последний параметр команды Collisions равен 2. 

Graphics3D 640,480 ;3D графический режим 
cam=CreateCamera() ;создаёт камеру 
sphe=CreateSphere() ;создаёт шарик 
PositionEntity sphe,4,0,8 ;позиция шарика 
EntityType sphe,1 ;тип шарика 
cone=CreateCone() ;создаёт конус 
PositionEntity cone,-3,0,8 ;позиция конуса 
EntityType cone,2 ;тип конуса 
Collisions 1,2,2,2 ;устанавливает столкновения 
While Not KeyHit(1) 
MoveEntity sphe,-0.05,0,0 
UpdateWorld ;обновляет анимацию и столкновения объектов 
RenderWorld ;прорисовывает мир 
Flip ;отбражает графический буфер 
Wend ;конец цикла 
End ;выход 

3 метод: метод со скольжением и трением. Последний параметр команды Collisions равен 3. 

Graphics3D 640,480 ;3D графический режим 
cam=CreateCamera() ;создаёт камеру 
sphe=CreateSphere() ;создаёт шарик 
PositionEntity sphe,4,0,8 ;позиция шарика 
EntityType sphe,1 ;тип шарика 
cone=CreateCone() ;создаёт конус 
PositionEntity cone,-3,0,8 ;позиция конуса 
EntityType cone,2 ;тип конуса 
Collisions 1,2,2,3 ;устанавливает столкновения 
While Not KeyHit(1) 
MoveEntity sphe,-0.05,0,0 
UpdateWorld ;обновляет анимацию и столкновения объектов 
RenderWorld ;прорисовывает мир 
Flip ;отбражает графический буфер 
Wend ;конец цикла 
End ;выход 

Дополнительные команды: 
Отменить все столкновения: 

ClearCollisions 

Сбросить столкновение для определённого объекта: 

ResetEntity(перем) 

Установить радиус столкновения для объекта (вещественное значение) с методом столкновения сфера к сфере. Если значение меньше 1, то объект будет частично проходить другой, больше - не доходить до его поверхности.: 

EntityRadius перем,знач# 

Установить границу столкновения для объекта с методом столкновения сфера к кубу: x,y,z - координаты относительно объекта, а ширина, длина, высота - размер границы: 

EntityBox перем,x#,y#,z#,ширина#,высота#,длина# 

Функция, проверяющая произошло ли столкновение. Возвращает 1, если объекты столкнулись и 0, если нет. переменная - сталкиваемый объект, а тип - тип всех объектов, с которыми сталкивается объект: 

EntityCollided(перем,тип) 

Функция, возваращающая тип объекта: 

GetEntityType(перем) 

Функция, возваращающая количество произошедших столкновений в мире: 

CountCollisions(перем) 

Пример на проверку столкновений. Если первый куб столкнулся со вторым, то выходит сообщение: 

Graphics3D 800,600 
SetBuffer BackBuffer() 
cam=CreateCamera() 
cub1=CreateCube() 
PositionEntity cub1,-4,0,8 
EntityType cub1,125 
cub2=CreateCube() 
PositionEntity cub2,4,0,8 
EntityType cub2,347 
Collisions 347,125,1,1 
Repeat 
MoveEntity cub2,-0.1,0,0 
UpdateWorld 
RenderWorld 
Flip 
Until EntityCollided(cub2,125) 
RuntimeError "Кубики столкнулись" 
End 
источник главы:blitz3d.hutz2.ru
 
 
 
3. Работа с файлами

В этой главе вы узнаете, как записывать и считывать данные из файлов. В Blitz3D существует три режима работы с файлами: режим записи, режим чтения и режим записи-чтения. Режим записи позволять открыть и занести значения в файл, а режим чтения считать значения из файла. При работе с файлом присваивается переменная-идентификатор, которая характеризует его. Чтение и запись происходит последовательно, путём перемещения указателя(аналогично в банках). В режиме записи файл создаётся автоматически, если он не существует на диске. Если перед записью в файле присутствовали значения, то они перезаписываются на новые. Внимание! Если прекращается работа с файлом в одном из режимов, то надо его закрыть, а затем можно его открыть в новом режиме.
Файл для записи открывают с помощью команды WriteFile и в скобках указывают путь в кавычках:
идентификатор_файла=WriteFile("путь")

Файл для чтения открывают с помощью команды ReadFile:
идентификатор_файла=ReadFile("путь")

Файл для записи/чтения открывают с помощью команды OpenFile:
идентификатор_файла=OpenFile("путь")

Закрыть файл:
CloseFile идентификатор_файла

Запись значений разных типов в файл (только в режиме для записи и записи/чтения).
Занести значение типа Byte:
WriteByte(идентификатор_файла,значение)

Занести значение типа Short:
WriteShort(идентификатор_файла,значение)

Занести значение типа Integer:
WriteInt(идентификатор_файла,значение)

Занести значение типа Float:
WriteFloat(идентификатор_файла,значение)

Занести значение типа String:
WriteString(идентификатор_файла,"значение")

Занести строку текста (запись текста строками, т.е. после каждой записи переход вниз) :
WriteLine(идентификатор_файла, "строка")

Занести некоторое число байт из банка в файл с некоторой позиции:
WriteBytes имя_банка,идентификатор_файла,позиция,число_байт

Чтение из файла значений разных типов (только в режиме для записи и записи/чтения).
Считать значение типа Byte:
имя_перем=ReadByte(идентификатор_файла)

Считать значение типа Short:
имя_перем=ReadShort(идентификатор_файла)

Считать значение типа Integer:
имя_перем=ReadInt(идентификатор_файла)

Считать значение типа Float:
имя_перем=ReadFloat(идентификатор_файла)

Считать значение типа String:
имя_перем=ReadString(идентификатор_файла)

Считать строку текста из файла:
имя_перем=ReadLine(идентификатор_файла)

Считать некоторое число байт из файла в банк с некоторой позицией начального байта:
ReadBytes имя_банка,имя_файла,позиция,число_байт

Работа с указателем файла. Значение начальной позиции указателя файла равно 0.
Проверка конца файла (функция возвращает 1, если конец файла и 0, если не конец файла):
Eof(идентификатор_файла)

Текущая позиция указателя файла (функция возвращает значение номера байта в данной позиции):
FilePos(идентификатор_файла)

Перенос указателя файла в нужную позицию:
SeekFile(идентификатор_файла,значение)

Пример программы на запись/чтение данных:
f=WriteFile("1.txt") ;открытие файла для записи
WriteByte(f,255) ;запись байтового значения
WriteInt(f,6500) ;запись целого значения
WriteFloat(f,0.1) ;запись вещественного значения
WriteString(f,"file") ;запись строкового значения
CloseFile(f) ;закрытие файла
f=OpenFile("1.txt") ;открытие файла для чтения
Print ReadByte( f ) ;печать байтового значения 
Print ReadInt( f ) ;печать целого значения
Print ReadFloat( f ) ;печать вещественного значения
Print ReadString( f ) ;печать строкового значения
CloseFile(f) ;закрытие файла

Работа с файлами и папками.
Размер файла (функция возвращает размер файла в байтах):
FileSize(идентификатор_файла)

Проверка на существование файла (функция возвращает 0, если файл не существует; 1, если он существует и 2, если это папка):
FileType(идентификатор_файла)

Копирование файла:
CopyFile "путь1","путь2"

Удаление файла:
DeleteFile("путь")

Открытие папки для чтения:
идентификатор_папки=ReadDir("путь")

Закрытие папки для чтения:
CloseDir(идентификатор_папки)

Считать имя файла из текущей открытой папки (считывание имен файлов идет по алфавиту):
NextFile$(идентификатор_папки)

Текущий рабочий путь папки по умолчанию:
CurrentDir$()

Изменить рабочий путь папки по умолчанию:
ChangeDir$()

Удаление папки:
DeleteDir("путь")
Категория: Учебники | Добавил: Барс (10.02.2010)
Просмотров: 2976 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мини Профиль
Обитатели
Derskiytub
zolux
Grareleindile
Michaeler
Барс
docxters
Philippn
Bongasexiodob
Richardlam
AriimaPa
Часы|Календарь
Банер


код кнопки:

Друзья сайта
Furry

Furry World
Мир Фурри


Технические

TERNOX SITE
New Blitz3D


Команды|Студии

Банер студии LDF
Банеры
Furry

Банер VG Cats

Технические

TERNOX SITE
New Blitz3D
Blitz3d.at.ua

Статистика

Вы здесь: -й дн(я/ей)


Copyright MyCorp © 2024 Бесплатный хостинг uCoz