Мой сайт
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории раздела
Blitz3D [5]
Много примеров и статей по работе с Blitz3D
BlitzPlus [0]
DarckBasic [0]
3D GameStudio [0]
Статистика

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

Коллизии и припятствия!
Вы в своей жизни хоть когда нибудь проходили сквозь стены или двигали различные объекты сквозь стены или полы? НЕТ. Да, прикольно наверное купили вы компьютер, поставили на стол, а он провалился на первый этаж, да и от туда полетел сквозь землю. Так вот и в компьютерных играх такого недолжно быть. Для этого в Blitz3D есть детектор обнаружения столкновения. Для начала при создании, какого либо объекта указываем его тип коллизии: EntityType (указатель на объект),(тип столкновения) 

Например:

Const T_SPHERE=1,T_BOX=2 
Collisions T_SPHERE, T_BOX,2,2

Sphere=CreateSphere()
EntityType Sphere, T_SPHERE –Тип сфера

Box=CreateCube()
EntityType Box, T_BOX –Тип коробка


После таких вот действий вы можете создавать хоть, сколько объектов и присваивать им тип столкновения. Главными строками являются первые две. Если посмотреть справочник по команде Collisions , то там вы увидите ещё и другие параметры, их вы будете использовать для конкретно своих целей. 

Сейчас уже существует очень много библиотек и доп. модулей, которые организуют такую физику, которую неотличить от жизненной, например библиотека ODE, Tokamak, PhysicX и т.д. И я в скором будущем приведу пример использования одной из этих библиотек. А сейчас вот вам пример стандартных Blitz`евских функций. 

Например:

Graphics3D 800,600,16
SetBuffer BackBuffer()

font=LoadFont("Blitz",14,True)
SetFont font

Const T_SPHERE=1,T_CUBE=2
Collisions T_SPHERE,T_CUBE,2,2

CamCollision = CreateSphere()
EntityType CamCollision,T_SPHERE
Camera=CreateCamera(CamCollision)
CameraRange Camera,0.1,1000

Cube=CreateCube()
ScaleEntity Cube,12,12,12
FlipMesh Cube
PositionEntity Cube,0,0,5
EntityType Cube,T_CUBE

Light=CreateLight(2,Camera)
LightRange Light,5

While Not KeyDown(1)
mxspd#=MouseXSpeed()*0.25
myspd#=MouseYSpeed()*0.25
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 
campitch#=EntityPitch(CamCollision)+myspd#
If campitch#<-85 Then campitch#=-85
If campitch#>85 Then campitch#=85
RotateEntity CamCollision,campitch#,EntityYaw(CamCollision)-mxspd#,EntityRoll(CamCollision)

If KeyDown(17) MoveEntity CamCollision,0,0,.2
If KeyDown(31) MoveEntity CamCollision,0,0,-.2
If KeyDown(32) MoveEntity CamCollision,.2,0,0
If KeyDown(30) MoveEntity CamCollision,-.2,0,0

RenderWorld
UpdateWorld
If KeyHit(57) Then w=1-w
Wireframe w
Text 10,10,"----------TESTING----------"
Flip
Wend
End


Источник: http://x3dgames.net.ru
Категория: Blitz3D | Добавил: maxturbo (21.05.2010) | Автор: Miha E
Просмотров: 940 | Комментарии: 1 | Теги: collison, Столкновение, коллизия, препятствие | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Corporation MaxTurbo Ltd © 2024