Постить разрешается. На форуме буду выкладывать не большие уроки по Blitz3D. Уроки пишутся по моему, не большому опыту, поэтому надеюсь спроса большого с них не будет. Всё, что знаю напишу.Надеюсь вы уже установили движок и знаете куда писать код и как компилировать.Статья
Начало. Начнём с создания 3D окна в мир игры:
Code
Graphics3D 640,480,16,1
SetBuffer BackBuffer()
Repeat
Until KeyHit(1)
End
Теперь попытаюсь объяснить, что мы написали.
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 – Завешает программу
Продолжим.
cam=CreateCamera() – это самая основная команда в 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– эта команда помещает объект в позицию.
Объекты помещены, используя X, Y, Z системы координат. X, Y и Z каждый имеет собственную ось. Определяя ценность для каждой оси, Вы можете помещать объект где-нибудь в 3D пространстве. 0,0,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# - наклон вперед / назад. Yaw#- переворот налево / вправо. Roll# - наклон налево / вправо. UpdateWorld – UpdateWorld [anim_speed#] anim_speed# (необязательный) – скорость мультипликации. Установлен по умолчанию в 1. RenderWorld [tween#]Показывает все объекты в мире.
Ура!Вот , что получилось:
Code
Graphics3D 640,480,16,1 SetBuffer BackBuffer()
cam=CreateCamera()
lit=CreateLight()
cub=CreateCube()
Posit ionE ntit y 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
Управление объектами. EntityColor cub,0,255,0– Устанавливает цвет объекта. Зеленые, красные и синие (R,G,B) в диапазоне 0-255. Default цвет – 255,255,255.
If KeyDown(208) MoveEntity cub,0,0,-.1- При нажатие кнопки в верх объект начинает двигатся вперёд, сканкод 200. При нажатие кнопки вниз объект начинает двигаться назад, сканкод 208. Чтобы узнать сканкод каждой кнопки в справке есть раздел Scancodes, там можно узнать номер каждой кнопки. Команда MoveEntity перемещает объект в пространстве.
If KeyDown(203) TurnEntity cub,0,1,0- поворот куба.
Вот теперь у нас получилась маленькая игра.
Code
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
Столкновение с объектами.
Вы уже заметили, что кубик проходит сквозь стены. Исправим, сделаем стены твёрдыми.
Const TypeCub=1,TypeStolb=2 – И так сначала мы создали две константы – TypeCub, равная единице и TypeStolb Равная двойке . EntityType – присваивает данному объекту данный тип. В нашем случае, тип – это просто цифры. Здесь мы вместо цифр использовали константы – чтобы не запутаться, да и чтобы легко можно было прочитать – к какому типу этот объект относится, и с чем соприкасается. Collision -Первый тип для столкновений. Второй тип должен столкнуть.
Типы столкновений. 1: столкновения « сфера к сфере « 2: столкновения « сфера к многоугольнику» 3: столкновения « сфера к box»
Действия объекта при столкновении. 1: Стоп, остановка. 2: полное столкновение со скольжением
EntityRadius cub,2 – Радиус столкновения объекта.
Ну вот теперь в нашей маленькой игре кубик врезается в стены:
[spoiler]
Code
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
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
Столкновение с объектами.
Вы уже заметили, что кубик проходит сквозь стены. Исправим, сделаем стены твёрдыми.
Const TypeCub=1,TypeStolb=2 – И так сначала мы создали две константы – TypeCub, равная единице и TypeStolb Равная двойке . EntityType – присваивает данному объекту данный тип. В нашем случае, тип – это просто цифры. Здесь мы вместо цифр использовали константы – чтобы не запутаться, да и чтобы легко можно было прочитать – к какому типу этот объект относится, и с чем соприкасается. Collision -Первый тип для столкновений. Второй тип должен столкнуть.
Типы столкновений. 1: столкновения « сфера к сфере « 2: столкновения « сфера к многоугольнику» 3: столкновения « сфера к box»
Действия объекта при столкновении. 1: Стоп, остановка. 2: полное столкновение со скольжением
EntityRadius cub,2 – Радиус столкновения объекта.
Ну вот теперь в нашей маленькой игре кубик врезается в стены:
[Цензура]? Зачем писать то, что в справке и так описано? Есть же справка на русском! Или вы думаете, что Blitz3D - архиредкая программа, по которой не хватает документации? http://www.boolean.name Там все расскажут. Зайди в Яндекс- найдешь с полсотни сайтов с такими уроками. Если не в моготу: www.blitz-school.info Под лежачий камень... мы всегда успеем.
QWER56 похоже трудится на повышение статуса в форуме! Давай ещё больше ненужных постов! Загаживай форум хламом! Уже не писал бы "На форуме буду выкладывать не большие уроки по Blitz3D. Уроки пишутся по моему, не большому опыту, поэтому надеюсь спроса большого с них не будет." Прошел год и уроки больше не написались (Правка ->Выделить все; Правка ->Вставить и можно стопицот уроков нахалтурить !). Запоминание прочитанного - рождает знание. Размышление над прочитанным и прожитым - рождает мудрость. А. Турчинов К сожалению, умных людей куда больше, чем благородных. Борис Парамонов
У него просто Блитц Демо версии наверное, а он экзешников не делает ! Запоминание прочитанного - рождает знание. Размышление над прочитанным и прожитым - рождает мудрость. А. Турчинов К сожалению, умных людей куда больше, чем благородных. Борис Парамонов
fon = LoadAnimMesh("Level\shooter.b3d") EntityRadius fon,2 EntityType fon,col
Collisions col,hero,3,1
Repeat
If KeyDown(200) MoveEntity cam,0,0,.1 If KeyDown(208) MoveEntity cam,0,0,-.1 If KeyDown(203) MoveEntity cam,-.1,0,0 If KeyDown(205) MoveEntity cam,.1,0,0
mmx# = -MouseXSpeed() / 3.0 mmy# = MouseYSpeed() / 3.0 RotateEntity cam, EntityPitch(cam) + mmy, EntityYaw(cam) + mmx, 0 If MouseDown(1) Then MoveEntity cam, 0, 0, .1 * dt If MouseDown(2) Then MoveEntity cam, 0, 0, -.1 * dt
RenderWorld
Flip
Until KeyHit(1)
End
Но есть такой момент что если направит мишкой взгляд вниз то камера провалитса под модель уровня. Скажите как ето исправить ?
Сообщение отредактировал Sttt912 - Среда, 05 Июня 2013, 20:45