Компьютерные игры своими силами

Компьютерные Игры Своими Силами


Главная
Новости
С чего начать
Языки программирования
Blitz3D
Dark Basic
Другое
Движки
Скачать
Ссылки
Гостевая книга

Blitz 3D

Blitz - инструмент для разработки компьютерных 3D и 2D игр. Разработан Марком Сибли. Изначально ориентирован как язык для разработки игр. Он основан на популярном и легком в освоении языке BASIC. Дополнительно, в языке для Блитца были введены поддержка связаных списков и работа с внешними DLL и памятью (использование так называемых банков памяти). Кроме набора комманд для работы с 2D и 3D графикой (используя DirectX 7.0, что является ОГРОМНЫМ плюсом для написания шароварных игр !) в блитце вы найдете комманды для работы с Сетью ( TCP, UDP, DirectPlay ) и звуком ( играет WAV, MP3, IT, XM ). Кроме того, используя расширения в виде ДЛЛ модулей Вы сможете подключить к нему такие полезные расширения как: Работа с физикой ( ODE, newton, tokamak ), рабта с реестром виндоуса, стенсильные тени, различные либы для быстрой паковки ресурсов ( как для сжатия, так и для защиты ресурсов) и другие...

Блитц подходит для написания любого типа игр. Это может быть РПГ, ФПС, Стратегия, гонки. На блитце реально написать даже небольшую ММОРПГ, чему есть убедительные доказательсва !

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

Основной русскоязычный ресурс – www.blitz.pp.ru

Русскоязычный электронный журнал Blitz Et Cetera - http://blitzetc.boolean.name


Надо сказать что в отличие от таких языков как Delphi, C++, VB создание трёхмерного пространства в Blitz3D весьма простая процедура… Всё укладывается в несколько строчек:

Graphics3D 640,480,16,2
camera=CreateCamera()
lite=CreateLight()
Repeat
If KeyHit(1) End
UpdateWorld
RenderWorld tween
Flip
Forever

Так как язык основан на всем знакомом BASIC’е, то в конце каждой строки не предусмотрено ставить символ «;». Первая команда устанавливает графический режим Graphics3D w,h,d,n где w и h это ширина и высота экрана в пикселях соответственно, проще говоря, разрешение экрана. Существует несколько стандартных разрешений экрана, основные из них: 640х480 и 1024х768. При попытке поставить не стандартное расширение или то, которое не поддерживается вашей видеокартой, будет выдана ошибка. Параметр d – это глубина цвета, чем выше тем качественнее изображение на экране. Глубина так же бывает стандартной величины: 16 и 24, при попытки выставить не стандартную возникнет ошибка. Параметр n это режим в котором будет работать программа, может иметь несколько значений: 0 – оконный режим при отладке программы и полноэкранный при релизе, 1 – всегда полноэкранный режим, 2 – всегда оконный режим, 3 – оконный, отмасштабированный… Второй командой создаётся камера, другими словами объект, который определяет какая именно часть мира будет видна в данный момент на экране. Надо отметить, что функция CreateCamera() не просто создаёт камеру, а возвращает указатель на этот объект, что в дальнейшем позволяет управлять этим объектом в пространстве. Таким образом во второй строчке переменной camera присваивается указатель на нашу камеру, в дальнейшем все операции с ней будут производиться именно через эту переменную… В третей строчке по той же схеме создаётся источник света и указатель на него сохраняется в переменной lite. Без света в нашем мире будет кромешная тьма и попросту будет ничего не видно… Далее следует конструкция цикла Repeat … Forever, это одна из вариаций цикла с постусловием, которая повторяет действия между этими операторами бесконечно, о чём говорит условие в конце «forever», дословно с английского переводится «навсегда». Между операторами цикла заключены следующие команды:

- If KeyHit(1) End Условный оператор If <условие> <действие>, если условие истина, то действие выполняется, иначе нет. В нашем случае условием служит функция KeyHit(1) которая возвращает значение true (истина) если была нажата кнопка с кодом указанном в параметре, в нашем случае это 1. Кнопка с кодом 1 это ESC, а команда End заканчивает выполнение программы. Иными словами, если нажать ESC в любой момент программы, то программа завершится. Почему в любой момент? Потому что все действия происходящие в цикле повторяются с огромной скоростью, и фактически нажав кнопку в любой момент программы это действие будет выполнено…

- UpdateWorld Обновляет мир, если вы производили какие либо действия с переменными, в которых сохранены указатели на те или иные объекты, то изменения вступят в силу, только после выполнения этой команды.

- RenderWorld Прорисовка мира. Прорисовывает всю графику на невидимы в данный момент графический буфер. В то что такое графические буфера (видимый и не видимый) я пояснять не буду, можете найти эту информацию сами.

- Flip Меняет графические буферы местами, таким образом происходит смена кадра и мы можем видеть движение…

Всё, можете себя поздравить, вы только что своими руками создали мир! Переполняет гордость? Тогда запускайте программу кнопкой F5… Почему я ничего не вижу? Спросите вы… Потому что в нашем мире пока существует только лишь бесконечное пространство пустоты, и свет ни от чего не отражается, а по тому мы ничего и не видим. Давайте создадим пару объектов. Скажем куб и шар…

Graphics3D 640,480,16,2
camera=CreateCamera()
lite=CreateLight()
cube=CreateCube()
sphere=CreateSphere()
PositionEntity camera, 0,0,-10
PositionEntity sphere, 0,5,0
Repeat
If KeyHit(1) End
UpdateWorld
RenderWorld
Flip
Forever

Итак, что у нас тут изменилось? Мы создали два объекта куб и шар, командами CreateCube и CreateSphere соответственно, их указатели были сохранены в соответствующих переменных… Команда PositionEntity e,x,y,z помещает ранее созданный объект в пространстве, e – переменная, где сохранён указатель на объект, x,y,z координаты в трёхмерном пространстве соответственно. По умолчанию, при создании новых объектов они помещаются в координаты 0,0,0. Таким образом мы переместили камеру и сферу, чтобы все объекты было видно на экране… Запустите программу и вы увидите результат.

Хорошо, у нас есть пространство, камера, свет и два объекта, но чего то не хватает. Давайте создадим возможность перемещения камеры внутри пространства.

Graphics3D 640,480,16,2
camera=CreateCamera()
lite=CreateLight()
cube=CreateCube()
sphere=CreateSphere()
PositionEntity camera, 0,0,-10
PositionEntity sphere, 0,5,0
Repeat
If KeyHit(1) End
If KeyDown(200) MoveEntity camera,0,0,1
If KeyDown(208) MoveEntity camera,0,0,-1
If KeyDown(203) MoveEntity camera,-1,0,0
If KeyDown(205) MoveEntity camera,1,0,0
If KeyDown(211) TurnEntity camera,1,0,0
If KeyDown(209) TurnEntity camera,-1,0,0
UpdateWorld
RenderWorld
Flip
Forever

И так, функция KeyDown(key) схожа по действию с KeyHit, но с одним отличием, возвращает истину, если кнопка зажата. MoveEntity Схожа с PositionEntity, но только x,y,z тут не конечные координаты, а смещение относительно текущих. TurnEntity по аналогии с PositionEntity поворачивает объект на несколько градусов относительно текущего положения. Управление камерой осуществляется стрелками, вверх, вниз, влево, вправо, коды клавиш: 200, 208, 203, 205 соответственно, и клавишами delete, код 211 и Page Down, код 209. Запустите программу и радуйтесь… Таким образом мы создали мир, несколько объектов в нём и возможность перемещения по нему всего за 19 строк программного кода.

 
Hosted by uCoz