Показать сообщение отдельно
Старый 07.06.2010, 21:59   #3
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Делаем квест на Xors3D

Так, давайте создадим новый файл в Blitz3D, назовем его "main.bb", и сохраним его в какую-нибудь папку, к примеру "Quest". Кидаем в эту же папку, файл поставляемый с установочными файлами Xors3D, "xors3d.bb". Теперь, открываем "main.bb" и пишем туда следующее:

Include "xors3d.bb"

xGraphics3D 800,600,32,0,True 
xSetBuffer xBackBuffer
()



While 
Not xKeyHit(1)

    
xUpdateWorld
    xRenderWorld
    xFlip
Wend
End 
Ну, тут всё понятно. Создаем окно, устанавливаем буфер, и запускаем цикл. Теперь, давайте создавать нашего игрока. Квест наш будет от первого лица, так что игрок - это сфера+камера. Давайте, напишем функцию создания игрока:

Function InitPlayer()
    
player=xCreateSphere()
        
xEntityAlpha player,0
    camera
=xCreateCamera(player)
End Function 
Теперь, вставьте InitPlayer() перед главным циклом. Также, не забудьте объявить player и camera глобальными, в дальнейшем нам это понадобится. Так, игрок создаётся, пора научить его передвигаться. Пишем функцию перемещения игрока:

Function UpdatePlayer()
    
mxspd#=xMouseXSpeed()*0.05 ; Получаем координаты передвижения мышки по Х
    
myspd#=xMouseYSpeed()*0.05 ; Получаем координаты передвижения мышки по Y
    
    
xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/Передвигаем мышку в центр окна
    
If xEntityPitch(camera)+myspd<-89 xRotateEntity camera,-89,0,Проверяем угол поворота камеры по X
    
If xEntityPitch(camera)+myspd>89 xRotateEntity camera,89,0,Проверяем угол поворота камеры по X
    xRotateEntity camera
,xEntityPitch(camera)+myspd,0,Поворачиваем камеру по X
    xRotateEntity player
,0,xEntityYaw(player)-mxspd,Поворачиваем камеру по Y
    
    
If xKeyDown(17xMoveEntity player,0,0,0.1
    
If xKeyDown(31xMoveEntity player,0,0,-0.1
    
If xKeyDown(30xMoveEntity player,-0.1,0,0
    
If xKeyDown(32xMoveEntity player,0.1,0,0
    
    Select True
        
Case xKeyDown(29)
            
xPositionEntity camera,0,0,0
            
        
Case Not xKeyDown(29)
            
xPositionEntity camera,0,2,0
    End Select
End 
Function 
Теперь, наш игрок умеет ходить, вертеть головой и сидеть. Ну, отлично! Давайте, ещё добавим немного физики! Изменяем функцию InitPlayer() следующим образом:

Function InitPlayer()
    
player=xCreateSphere()
        
xEntityAlpha player,0
        xEntityAddSphereShape player
,10,1
    camera
=xCreateCamera(player)
End Function 
Так, запускаем игру и видим что нас уносит вниз, это действует физика Xors3D. Команда xEntityAddSphereShape entity, mass#, radius# добавляет физическое тело круглой формы. В неё передается три параметра:
entity - объект, к которому надо добавить физическое тело
mass# - масса физического тела
radius# - радиус физического тела

Давайте, добавим временную платформу, чтобы наш игрок не уходил далеко вниз:

Function InitScene()
    
platform=xCreateCube()
        
xScaleEntity platform,10,1,10
        xPositionEntity platform
,0,-3,0
        xEntityAddBoxShape platform
,0
End 
Function 
После, добавьте строчку InitScene() после InitPlayer() перед циклом. Запускаем, и видим как наш игрок мягко падает на куб. Теперь расскажу про команду xEntityAddBoxShape entity, mass#, width#, height#, depth#, которая добавляет физическое тело параллепидного типа:
entity - это объект, к которому добавляется физическое тело
mass# - масса физического тела (в дальнейшем, я буду использовать сокрашение ф.т.)
width# - ширина ф.т.
height# - высота ф.т.
depth# - глубина нашего ф.т.

Примечание: Если значение mass# сделать равным нулю, то объект становиться статичным. Также, если объект стандартный примитив, то не обязательно передавать какие-либо параметры, помимо entity и mass#, Xors3D сам доделывает нужную работу.

Ну, похоже на сегодня всё! Ждите продолжения! И удачи Вам!
Вложения
Тип файла: rar Quest.rar (6.1 Кб, 974 просмотров)
(Offline)
 
Ответить с цитированием
Эти 8 пользователя(ей) сказали Спасибо Hurrit за это полезное сообщение:
baton4ik (08.06.2010), Harter (11.07.2010), Nex (14.06.2010), Nuprahtor (07.06.2010), pax (28.07.2010), Randomize (08.06.2010), St_AnGer (08.06.2010), viper86 (21.07.2010)