О сайте
  Новости сайта
  Почитать
  Утилиты
 
  Help Blitz3D
 
   

 

 

 

 

 

 

 

 

 

 

Записки начинающего программиста (часть 3)

Теперь создадим простейшую модель ружья, для зтого в функцию создания игрока, после строки PositionEntity user,x#,y#,z#, вставим вызов функции создания ружья create_gun1()

Отдельно напишем саму функцию:

Function create_gun1() ;делаем ружье
gun1=CreateCylinder (16,1,camera)
ScaleEntity gun1,0.01,0.5,0.01
EntityColor gun1,95,95,95
RotateEntity gun1,90,0,0
MoveEntity gun1,0.1,0,0.1
End Function

В этой функции мы создаем цилиндр, меняем его размер, раскрашиваем и устанавливаем в нужное положение. Обратите внимание: цилиндр привязан к камере!

Хочу отметить, что этот пример простейший, но, когда Вы сделаете свою модель с анимацией в 3D-MAX, то здесь можно включить анимацию, тогда ружьё будет всё время покачиваться.

Попробуем теперь сделать оптику для нашего ружья.

Загрузим изображение оптического прицела и скроем его, для этого в функцию setup(), перед созданием игрока добавьте строки:

pric1=LoadSprite("sprites\Прицел2.bmp",4)
ScaleSprite pric1,0.09,0.066
HideEntity pric1
;оптика

В функцию создания игрока перед вызовом функции создания ружья вставьте строки:

zoom#=1 ;увеличение
EntityParent pric1,camera

В функцию создания ружья добавьте строку: HideEntity gun1; для скрытия ружья

В файл GLOBAL.BB добавим:

Global zoom#; увеличение
Global pric1; оптический прицел
Global zo;оптика
Global mz; колесо мыши
Global gun1; ружье
Global gun#; номер оружия
Global pricel

Теперь на экране остался один прицел, ружья не видно.

В начале функции обновленя игрока вставьте строки:

mz=MouseZSpeed();выбор оружия и zoom
If zoom#=1gun#=gun#+mz;выбор оружия номер оружия
If gun#<0 gun#=1
If gun#>1 gun#=0
If MouseHit(2) zo=zo+1: zoom#=2
;оптика
If zo=2 zo=0
If gun#=0 create_optic0()
; нет оптики

If gun#=1
create_optic1()
;оптика
ShowEntity gun1
Else
HideEntity gun1
EndIf
CameraZoom camera,zoom#
; увеличение камеры

Добавьте в программу функцию:

Function create_optic0();без оптики
If zo=1
zo=0
zoom#=1
EndIf
End Function

И еще одну:

Function create_optic1(); оптика для ружья
If zo=1
zoom#=zoom#+mz*4:ShowEntity pric1
;показать оптику
If zoom#<4 Then zoom#=4;мин
If zoom#>20 Then zoom#=20;мах
Else
zoom#=1:HideEntity pric1
;скрыть оптику
EndIf
PositionEntity pric1,0,0,zoom#/15
End Function

В строку DrawImage pricel,px,py внести условие:

If gun#>0 DrawImage pricel,px,py; показать прицел

Всё теперь работает. Только здесь ещё остаётся поле для экспериментов. Рисунок прицела на спрайте выглядит не очень чётко, то что делает DrawImage выглядит намного лучше. Наврное надо использовать одновременно оба способа. Может у кого будут другие идеи?

Можете посмотреть, что получилось в результате (255 кб)
Скачать пример

<<< 1 часть
<<< 2 часть

Анатолий Ковалев Алтайский край, Романово, 03.02. 2008

 

     
     
     
Hosted by uCoz