Пятница, 26.04.2024, 06:25
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
BlitzMax [14]
Blitz3D [9]
BlitzPlus [0]
Xna [1]
DarkBasic [0]
Общее [3]
Наш опрос
А вы пойдете на выборы?
1. Пошел бы, но я не совершеннолетний
2. Да
3. Нет
4. Да, я хочу сделать жизнь лучше
5. Нет, мой голос ни на что не повлияет
6. Нет, я не совершеннолетний
Всего ответов: 13
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Статьи
Главная » Статьи » Blitz3D

Учебник по Blitz3D
I

Первая часть учебника

Урок № 1.

Окно в 3D мир

И так давайте начнем первый урок, после того как вы установили Blitz3d, вы горите желанием программировать.

А начнем мы с создания окна DirectX3D.

И так вот он код

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

Repeat

Until KeyHit(1)

End

После того как вы это запустили, вы наверное что то ждали, ну не что конечно не произойдет. Потому что мы только что открыли окно в DirectX. Ура мы вошли в 3d мир.

Вы может не понимаете что это за строки кода. Тогда разберём по порядку

Graphics3D 640,480,16,1 это строка открывает окно в 3D мир

Устанавливает 3D Графический способ. Эта команда должна быть выполнена перед

любой другой 3D командой, иначе программы возвратят ошибку.

Синтакс такой: Graphics3D ширина, высота, глубина цвета, режим

Ширина, высота – размер создаваемого экрана (в пикселях есь-сно)

Глубина – глубина цвета – 16, 24 или 32 бита на пиксель.

Цветовой способ с 16 частицами показывает наименьшее количество количества

цветов, 65536. И с 32 частицами цветовые способы с 24 частицами показывают более

чем 16 миллионов Цвета и в результате предлагают лучшую картину качества, хотя

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

Режим:

0 – оконный во время разработки (если возможно), полноэкранный в .exe формате;

1 – всегда полноэкранный

2 – всегда оконный

3 – всегда оконный, с возможностью изменения размеров окна.

SetBuffer BackBuffer() – Установить поток, буфер.

Repeat

Until KeyHit(1) – Между этими двумя командами будет происходить основной цикл игры. При нажатии кнопки ESC начинает читать следующую команду.

End – Завешает программу

Урок № 2.

В окне появился 3D Объект

cam=CreateCamera() – это самая основная команда в 3D программах. Если не будет даже

одно камеры то 3D Программа работать не будет, камера-это тоже самое, что и наши

глаза, через неё мы видим окружающий 3D мир.

Lit=CreateLight() – Это команда создает источник света. Можно изменять тип светы в

скобки вписываем следующие значения:

1:направленный
2:точка
3: пятно

Да, кстати, свет – это объект, а это значит, что им тоже можно управлять, как и всеми

объектами

cub=CreateCube() – Это мы создаем 3D объект куб. Кроме куда можно ещё создать объекты:

CreateSphere ( [segments][,parent] )

CreateCylinder ( [segments][,parent][,solid] )

CreateCone ( [segments][,parent][,solid] )

PositionEntity cub,0,0,5 – Эта команда помещает объект в позиции и в 3D месте.

Объекты помещены, используя Z, Y, Z системы координат. X, Y и Z каждый имеет их

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

ценность для каждой оси, Вы можете помещать объект где-нибудь в 3D месте. 0,0,0 –

центр 3D места, и если камера направляет в неплатеже положительное Z указание, то

расположение объекта с ценностью Z выше упомянутых 0 будет заставить это появиться

перед камерой, принимая во внимание, что отрицательная ценность Z видела бы, что это

исчезло позади камеры. Изменение ценности X видело бы, что это перемещающий боком,

и изменение ценности Y будет видеть это, продвигаясь вниз.

ScaleEntity cub,1,0.3,1 – Изменяет размер объекта

RotateEntity cub,0,40,0 – Вращает юридическое лицо так, чтобы это было при абсолютной ориентации.

TurnEntity cub,.6,.2,.3 - TurnEntity entity,pitch#,yaw#,roll#,[,global]

Tpitch# - X угол юридического лица, и эквивалентна наклону вперед / назад.

Yaw# - Y угол юридического лица, и эквивалентен превращению налево / вправо.

Roll# - Z угол юридического лица, и эквивалентен наклону налево / вправо.

UpdateWorld – UpdateWorld [anim_speed#]

anim_speed# (необязательный) – скорость для мультипликации. Установлен по

умолчанию в 1.

Оживляет все объекты в мире, и исполняет проверку столкновения.

Необязательный anim_speed# - параметр позволяет Вам, затрагивают скорость

мультипликации всех объектов сразу. Ценность 1 оживит объекты в их

обычной скорости мультипликации, ценность 2 оживит объекты в двойной

скорости Мультипликации.

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

перед запросом.

RenderWorld [tween#]

Показывает все объекты в мире.
Необязательный tween# параметр может использоваться, чтобы отдать объекты в точке

где-нибудь между их захваченным положением и их текущим положением. Ценность

tween# = 0 отдаст объекты в их захваченном положении, ценность tween# = 1

объекты в их текущем оложении. Другие ценности могут использоваться для вставки

Defaults to 1.

Tweening – техника, имеет обыкновение позволять играм иметь их логику игры, обновил

остановленное количество времен, например 30, при наличие Blitz3D интерполирует

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

это может, например 60 +, с каждой рамкой, различной к последнему.

Это кончается игрой, которая только должна обновить ее логику игры по половине

разряда, отдает в секунду, освобождая CPU время, при в то же самое время наличии игры,

управляемой как гладкий насколько возможно на машине anybody's.

Tweening – весьма продвинутая техника, и не необходимо использовать это, так что не

волнуйтесь, весьма не ли Вы понимаете это. См. демонстрационный пример, включенный

в mak (прозвище Марка Сиблиа, автор Blitz3D) справочник Blitz3D секции образцов для

демонстрации .

И вот наконец весь код программы:

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

cam=CreateCamera()

lit=CreateLight()

cub=CreateCube()

PositionEntity cub,0,0,5

PositionEntity cub,0,0,5

ScaleEntity cub,1,0.3,1

RotateEntity cub,0,40,0

Repeat

TurnEntity cub,.6,.2,.3

TurnEntity lit,5,5,0

UpdateWorld

RenderWorld

Flip

Until KeyHit(1)

End

Урок № 3.

Движение объекта в 3D пространстве.

EntityColor cub,0,255,0 – Устанавливает цвет объекта.
Зеленые, красные и синие (R,G,B) ценности должны быть в диапазоне 0-255. Default цвет – 255,255,255.

If KeyDown(200) MoveEntity cub,0,0,.1

If KeyDown(208) MoveEntity cub,0,0,-.1- При нажатие кнопки в верх объект начинает двигатся вперёд сканкод 200. При нажатие кнопки вниз объект начинает двигаться назад, сканкод 208. Чтобы узнать сканкод каждой кнопки в справке есть раздел Scancodes, там можно узнать номер каждой кнопки. Команда MoveEntity перемещает объект по 3D пространству.

If KeyDown(203) TurnEntity cub,0,1,0

If KeyDown(205) TurnEntity cub,0,-1,0 – Помните в предыдущем уроке у нас вращался куб, если вы не забыли то он вращался с помощью команды TurnEntity. В данный момент нам нужна эта команда, чтобы куб поворачивал, на подобии как в гонках.

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

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

lit=CreateLight()

cub=CreateCube()

EntityColor cub,0,255,0

cam=CreateCamera(cub)

; Делаем столб

stolb=CreateCube()

ScaleEntity stolb,1,4,1

PositionEntity stolb,-7,0,7

; Делаем столб

stolb2=CreateCube()

ScaleEntity stolb2,1,4,1

PositionEntity stolb2,7,0,7

plan=CreatePlane()

EntityColor plan,0,0,255

PositionEntity plan,0,-1,5

PositionEntity cam,0,3,-5

Repeat

If KeyDown(200) MoveEntity cub,0,0,.1

If KeyDown(208) MoveEntity cub,0,0,-.1

If KeyDown(203) TurnEntity cub,0,1,0

If KeyDown(205) TurnEntity cub,0,-1,0

UpdateWorld

RenderWorld

Flip

Until KeyHit(1)

End

Урок № 4.

Столкновение с препятствиями.

Вы наверное заметили что у нас куб проходит сквозь колоны. Так веди не интересно

нужно нам чтобы стены были тверды, то есть нужно сделать проверку на столкновение.

Const TypeCub=1,TypeStolb=2 – И так сначала мы создали две константы – TypeCub, равная единице и TypeStolb Равная двойке

EntityType объект, тип объекта – присваивает данному объекту данный тип. Тип (в

данном случае) – это просто цифры. Здесь мы вместо цифр использовали константы –

чтобы не запутаться, да и чтобы легко можно было прочитать – к какому типу этот объект

относится, и с чем соприкасается

Collision первый тип, второй тип, метод, результат –

Первый тип, который будет проверен для столкновений.

Второй тип, который нужно столкнуть с.

Метод- метод обнаружения столкновения.
1: столкновения « сфера к сфере «
2: столкновения « сфера к многоугольнику «
3: столкновения « сфера к box «

Результат- что исходное юридическое лицо делает, когда столкновение происходит.

1: Стоп, остановка.

2: полное столкновение со скольжением

3: предотвратите объекты от скатывающихся наклонов

EntityRadius cub,2 – Радиус столкновения объекта.

Устанавливает радиус сферы столкновения объекта.

объект должен быть установлен для всех объектов

вовлеченных в сферические столкновения, который является всеми исходными

объектами (поскольку столкновения – всегда « сфера к кое-чему «), и вовлечены ли

объекты предназначения в столкновения « сфера к сфере « (метод столкновения Номер1.)

Ура теперь куб не проходит насквозь столбов, а сталкивается и останавливается.

Вот весь код:

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

Const TypeCub=1,TypeStolb=2

lit=CreateLight()

cub=CreateCube()

EntityColor cub,0,255,0

EntityType cub,TypeCub

cam=CreateCamera()

; Делаем столб

stolb=CreateCube()

ScaleEntity stolb,1,4,1

PositionEntity stolb,-7,0,7

EntityType stolb,TypeStolb

; Делаем столб2

stolb2=CreateCube()

ScaleEntity stolb2,1,4,1

PositionEntity stolb2,7,0,7

EntityType stolb2,TypeStolb

EntityRadius cub,2

plan=CreatePlane()

EntityColor plan,0,0,255

PositionEntity plan,0,-1,5

PositionEntity cam,0,3,-5

Collisions TypeCub,TypeStolb,2,3

Repeat

If KeyDown(200) MoveEntity cub,0,0,.1

If KeyDown(208) MoveEntity cub,0,0,-.1

If KeyDown(203) TurnEntity cub,0,1,0

If KeyDown(205) TurnEntity cub,0,-1,0

UpdateWorld

RenderWorld

Flip

Until KeyHit(1)

End

Урок № 5.

Искусственный интеллект.

Искусственный интеллект это не ум это просто боту даёш определённую команду.

dist# = EntityDistance ( bot, cub )

If dist > 2 - Проверяет расстояние между двумя объектами

TurnEntity bot,0,Sgn(DeltaYaw(bot,cub))*0.9,0 – команда вращает объект в сторону другого

объекта по оси Y. Где у нас *0.9,0 это скорость вращения.

MoveEntity bot,0,0,0.03 – двигает бота со скорости 0.3 вперёд

If EntityCollided (bot,Typestolb) – при столкновением бота с колонной

TurnEntity bot,0,5,0 – бот поворачивает на право.

EndIf – конец цикла

Это мы сделали самый простой способ искусственного интеллекта.

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

Const TypeCub=1,TypeStolb=2

lit=CreateLight()

cub=CreateCube()

EntityColor cub,0,255,0

EntityType cub,TypeCub

cam=CreateCamera(cub)

; Делаем столб

stolb=CreateCube()

ScaleEntity stolb,1,4,1

PositionEntity stolb,-7,0,7

EntityType stolb,TypeStolb

; Делаем столб

stolb2=CreateCube()

ScaleEntity stolb2,1,4,1

PositionEntity stolb2,7,0,7

EntityType stolb2,TypeStolb

EntityRadius cub,2

; Бот

bot=CreateCube()

ScaleEntity bot,1,0.5,2

bot1=CreateCube(bot)

ScaleEntity bot1,0.7,0.8,0.3

PositionEntity bot1,0,1.5,0.4

EntityType bot,TypeCub

EntityRadius bot,2

plan=CreatePlane()

EntityColor plan,0,0,255

PositionEntity plan,0,-1,5

PositionEntity cam,0,3,-5

Collisions TypeCub,TypeStolb,2,3

Collisions TypeCub,Typecub,2,3

Repeat

dist# = EntityDistance ( bot, cub )

If dist > 2

TurnEntity bot,0,Sgn(DeltaYaw(bot,cub))*0.9,0

MoveEntity bot,0,0,0.03

EndIf

If EntityCollided (bot,Typestolb)

TurnEntity bot,0,5,0

EndIf

If KeyDown(200) MoveEntity cub,0,0,.1

If KeyDown(208) MoveEntity cub,0,0,-.1

If KeyDown(203) TurnEntity cub,0,1,0

If KeyDown(205) TurnEntity cub,0,-1,0

UpdateWorld

RenderWorld

Flip

Until KeyHit(1)

End

Урок № 6.

Появление Здоровья.

Во многих играх без здоровья обойтись не как, как например, в играх стрелялках.

zdorov=100 – это не команда это просто переменная. Пишем любое имя, в данный момент

у нас Zdorov и вписываем, сколько должно быть здоровья, у нас 100.

Global fntArial – Глобальная переменная

fntArial=LoadFont("Arial Cry",24,False,False,False) – Это команда изменяет текст “Arial

Cry” это шрифт текста, где 24 это размер шрифта, где False если изменить на True первая

будет жирный цвет, вторая курсивом, третья подчёркнутый текст.

И так теперь нам нужно вывести на экран сколько у нас здоровья

Text 280,47,"Health="+zdorov – Выводим на экран текст, где цифры это место положение

текста, Где в кавычках это слово или фраза которая будет показана на экране, в данный

момент у нас сейчас слово Health переводится как здоровье. Где +zdorov это наша

переменная, которая будет показывать сколько в данный момент сейчас здоровья.

If EntityCollided (cub,Typecub) zdorov=zdorov-1 – проверяем на столкновение куба с ботом,

если столкновение происходит то отнимает один процент здоровья zdorov=zdorov-1

И так, если здоровье достигает меньше нуля то отщёт идёт на минус но нам это не надо то мы делаем так:

If zorov=zdorov<1 – если здоровье меньше одного

Else - то

End – закрываем программу, выход.

EndIf

Как вы догадались можно не только так использовать здоровье но и кол-во брони кол-во патронов и т.д

Вот весь код программы:

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

Global fntArial

;Load fonts to a file handle variables

fntArial=LoadFont("Arial Cry",24,False,False,False)

Const TypeCub=1,TypeStolb=2

zdorov=100

lit=CreateLight()

cub=CreateCube()

EntityColor cub,0,255,0

EntityType cub,TypeCub

cam=CreateCamera(cub)

stolb=CreateCube()

ScaleEntity stolb,1,4,1

PositionEntity stolb,-7,0,7

EntityType stolb,TypeStolb

stolb2=CreateCube()

ScaleEntity stolb2,1,4,1

PositionEntity stolb2,7,0,7

EntityType stolb2,TypeStolb

EntityRadius cub,2

bot=CreateCube()

ScaleEntity bot,1,0.5,2

bot1=CreateCube(bot)

ScaleEntity bot1,0.7,0.8,0.3

PositionEntity bot1,0,1.5,0.4

EntityType bot,TypeCub

EntityRadius bot,2

plan=CreatePlane()

EntityColor plan,0,0,255

PositionEntity plan,0,-1,5

PositionEntity cam,0,3,-5

Collisions TypeCub,TypeStolb,2,3

Collisions TypeCub,Typecub,2,3

Repeat

dist# = EntityDistance ( bot, cub )

If dist > 2

TurnEntity bot,0,Sgn(DeltaYaw(bot,cub))*0.9,0

MoveEntity bot,0,0,0.03

EndIf

If KeyDown(200) MoveEntity cub,0,0,.1

If KeyDown(208) MoveEntity cub,0,0,-.1

If KeyDown(203) TurnEntity cub,0,1,0

If KeyDown(205) TurnEntity cub,0,-1,0

UpdateWorld

RenderWorld

If EntityCollided (cub,Typecub) zdorov=zdorov-1

SetFont fntArial

Text 280,47,"Health="+zdorov

If zorov=zdorov<1

Else

End

EndIf

Flip

Until KeyHit(1)

End

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

Источник: http://blitzetc.boolean.name/add/eugene.html

Категория: Blitz3D | Добавил: JohnK (07.06.2007) | Автор: Поляков Евгений
Просмотров: 6329
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright JohnK© 2024