Создание вейпоинтов для ботов

 

 

   

 

 

 

 

Привет всем геймдеверам! В этой статье я опишу подробно как создать вейпоинты для ботов! И так приступим!
Для начала создадим камеру и поверхность по которой будет ходить наш бот.

Graphics3D 800,600,16,1
SetBuffer BackBuffer()
camera=CreateCamera () ;Создание камеры
PositionEntity camera,0,5,-10 ;Начальная позиция камеры

pol=CreatePlane () ;Создание пола


Repeat

UpdateWorld
RenderWorld

Flip
Until KeyHit(1)


А за тем и самого бота в качестве бота будем использовать простую сферу. Дописываем после процедуры создания пола процедуру создания бота и за одно раскрасим наших два объекта:

Graphics3D 800,600,16,1
SetBuffer BackBuffer()

camera=CreateCamera () ;Создание камеры
PositionEntity camera,0,5,0 ;Начальная позиция камеры

pol=CreatePlane () ;Создание пола
EntityColor pol,104,72,47 ;Цвет пола в RGB

bot=CreateSphere (8);Создание бота (сферы)
PositionEntity bot,0,1,0 ;Начальная позиция бота
EntityColor bot,73,224,115 ;Цвет бота в RGB

Repeat

UpdateWorld
RenderWorld

Flip
Until KeyHit(1)

Сначала сделаем чтоб камера следила за ботом(для удобства). Вставьте в основной цикл строку:

PointEntity camera,bot

Теперь непосредственно приступим к созданию вейпоинтов. В качестве вейпоинтов можно использовать любой объект, но лучше всего использовать пивоты так как они невидимы в игре. Создадим первый вейпоинт:

waypoint1=CreatePivot ()
PositionEntity waypoint1,0,1,10

Теперь мы заставим двигаться бота в сторону вейпоинта (только первый раз нельзя использовать команду PointEntity, просто направьте его вручную). Вставьте строчку в главный цикл программы:

MoveEntity bot,0,0,.02

Мы видим, что бот двигается к первому вейпоинту, а за тем останавливается. Давайте создадим ещё два вейпоинта:

waypoint2=CreatePivot ()
PositionEntity waypoint2,10,1,5

waypoint3=CreatePivot ()
PositionEntity waypoint3,-10,1,5

А что дальше? А дальше мы пишем инструкцию по которой будет двигаться наш бот:

Sluch=Rnd(1,2)

If EntityDistance (bot,waypoint1)<.1 Then
If Sluch=1 PointEntity bot,waypoint2
If Sluch=2 PointEntity bot,waypoint3
EndIf

If EntityDistance (bot,waypoint2)<.1 Then
If Sluch=1 PointEntity bot,waypoint1
If Sluch=2 PointEntity bot,waypoint3
EndIf

If EntityDistance (bot,waypoint3)<.1 Then
If Sluch=1 PointEntity bot,waypoint1
If Sluch=2 PointEntity bot,waypoint2
EndIf

И ещё что бы было заметно движение бота по полу создайте два куба:

box1=CreateCube()
PositionEntity box1,10,1,10
EntityColor box1,44,29,182
box2=CreateCube()
PositionEntity box2,-10,1,10
EntityColor box2,44,29,182

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

SeedRnd MilliSecs()

Вот тот код, который должен был получится:

Graphics3D 800,600,16,1
SetBuffer BackBuffer()

camera=CreateCamera () ;Создание камеры
PositionEntity camera,0,5,-10 ;Начальная позиция камеры

pol=CreatePlane () ;Создание пола
EntityColor pol,104,72,47 ;Цвет пола в RGB

box1=CreateCube() ;Создание куба 1
PositionEntity box1,10,1,10 ;Начальная позиция куба 1
EntityColor box1,44,29,182 ;Цвет куба 1 в RGB
box2=CreateCube() ;Создание куба 2
PositionEntity box2,-10,1,10 ;Начальная позиция куба 2
EntityColor box2,44,29,182 ;Цвет куба 1 в RGB

bot=CreateSphere (8) ;Создание бота (сферы)
PositionEntity bot,0,1,0 ;Начальная позиция бота
EntityColor bot,73,224,115 ;Цвет бота в RGB

waypoint1=CreatePivot () ;Создание первого вейпоинта
PositionEntity waypoint1,0,1,10 ;Начальная позиция первого вейпоинта

waypoint2=CreatePivot () ;Создание второго вейпоинта
PositionEntity waypoint2,-10,1,0 ;Начальная позиция второго вейпоинта

waypoint3=CreatePivot () ;Создание третьего вейпоинта
PositionEntity waypoint3,10,1,0 ;Начальная позиция третьего вейпоинта

Repeat
PointEntity camera,bot ;Камера следит за ботом

MoveEntity bot,0,0,.07 ;бот двигается по оси Z


Sluch=Rnd(1,2) ;Присваивание переменной Sluch значения от 1 до 2

If EntityDistance (bot,waypoint1)<.1 Then ;Если дистанция между ботом и вейпоинтом 1 меньше 0.1, то
If Sluch=1 PointEntity bot,waypoint2 ;Если переменная Sluch=1, то бот смотрит в сторону вейпоинта 2
If Sluch=2 PointEntity bot,waypoint3 ;Если переменная Sluch=2, то бот смотрит в сторону вейпоинта 3
EndIf ;Конец если

If EntityDistance (bot,waypoint2)<.1 Then ;Если дистанция между ботом и вейпоинтом 2 меньше 0.1, то
If Sluch=1 PointEntity bot,waypoint1 ;Если переменная Sluch=1, то бот смотрит в сторону вейпоинта 1
If Sluch=2 PointEntity bot,waypoint3 ;Если переменная Sluch=1, то бот смотрит в сторону вейпоинта 3
EndIf ;Конец если

If EntityDistance (bot,waypoint3)<.1 Then ;Если дистанция между ботом и вейпоинтом 3 меньше 0.1, то
If Sluch=1 PointEntity bot,waypoint1 ;Если переменная Sluch=1, то бот смотрит в сторону вейпоинта 1
If Sluch=2 PointEntity bot,waypoint2 ;Если переменная Sluch=1, то бот смотрит в сторону вейпоинта 2
EndIf ;Конец если

UpdateWorld
RenderWorld

Flip
Until KeyHit(1)

Ну вот и всё, что я хотел здесь сказать. Основу создания вейпоинтов вы теперь знаете. Вам остаётся только экспериментировать и применять свои знания.

 


Назад

 

 

 

 

 

 

 

 

 

 

 

 

 

Hosted by uCoz="Hosted by uCoz" />