|
|
Создание вейпоинтов для ботов
Материал из Blitz Et Cetera
Привет всем геймдеверам! В этой статье я опишу подробно как создать вейпоинты для ботов! Итак, приступим!
Для начала создадим камеру и поверхность, по которой будет ходить наш бот.
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)
Ну вот и всё, что я хотел здесь сказать. Основу создания вейпоинтов вы теперь знаете. Вам остаётся только экспериментировать и применять свои знания.
Автор: Delmi
|
|