forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Бот-самолёт (http://forum.boolean.name/showthread.php?t=5919)

Crystal 16.04.2008 16:58

Бот-самолёт
 
Ктото уже делал леталку?
Если да то прошу помочь мне.
Необходимо научить бота уворачиваться от столкновения со мной, и с другими ботами.
Как это лучше делать?
Может быть у вас есть пример?
----------------------------------------
Те способы уворота которые реализовывал я, меня не устраивают.
-----------------------------------------
Да и как боту лучше вести преследование меня?
Я просто поворачиваю бота на себя.

HolyDel 16.04.2008 17:19

Ответ: Бот-самолёт
 
я делал сетевую леталку. уворачивания не делал, ибо ето нафиг мне не упало.

Crystal 16.04.2008 18:10

Ответ: Бот-самолёт
 
Без уворачивания ведь враг со мной столкнётся!
И друг с другом будут сталкиваться...
Я пытался использовать турнентити, и танслатеентити, если я на
определённом расстоянии попадаю в угол обзора бота.
Но какието фуфловые увороты получаются...

Кстати исходнячка не осталось? Яб не против посмотреть.

HolyDel 16.04.2008 18:19

Ответ: Бот-самолёт
 
неа. гдето на форуме был, ищи Flyer.
фактически фраг бот должен определять углы между целью, если сумма квадратов углов становится меньше какого то определеного значения то надо сворачивать в сторону, противоположную углу. можеш ввести состояние "сворачиваемости".

Crystal 16.04.2008 18:54

Ответ: Бот-самолёт
 
Ну у меня вот так:

If useru=2
If EntityDistance(a\entity,User)<140 And Userspeed#>0 And Abs(dx#)<20 And stopbot#=0 Then
TranslateEntity a\entity,0,+speed1#,0
v#=0.7
End If
End If

Исходняк твой посмотрел, жаль не пригодится...

Crystal 16.04.2008 23:02

Ответ: Бот-самолёт
 
Мож кто хоть теорией поведения летающего бота поделится?

HolyDel 17.04.2008 11:41

Ответ: Бот-самолёт
 
function SmotritelZaBotom(bot,ent)
return DeltaYaw(bot,ent)*DeltaYaw(bot,ent) + DeltaPitch(bot,ent)*DeltaPitch(bot,ent)
end function

...
for b.bot=each bot
if SmotritelZoBotom(b\ent,player)<30 then юла-юла-юла
next

H@NON 17.04.2008 15:40

Ответ: Бот-самолёт
 
Вложений: 1
в аттаче отрывок какой то статьи на тему самолетов, там вроде объясняется как нужно делать ИИ бота, но вот жаль статья не полная :(

Crystal 17.04.2008 18:15

Ответ: Бот-самолёт
 
Цитата:

return DeltaYaw(bot,ent)*DeltaYaw(bot,ent) + DeltaPitch(bot,ent)*DeltaPitch(bot,ent)
Пардон я чтото не понял, зачем тут идёт это умножение и сложение?
Я угол так просто проверяю:
dx#=DeltaPitch(a\entity,User)
dy#=DeltaYaw(a\entity,User)

HolyDel 17.04.2008 18:37

Ответ: Бот-самолёт
 
нам жэ нужно узнать попал ли объектв конус перед ботом? или в пирамиду? если в конус- то мы должны вычеслить сумму квадратов по каждой оси.

FrankH 17.04.2008 23:44

Ответ: Бот-самолёт
 
А что именно нужно, способность бота правдоподобно реагировать на цель или уходить от столкновений?
Я сам дольше всего продолбался именно с первым, и кое-как отшлифовал, работает так что если цель находится за полем зрения или сзади, делаем хаотичный маневр, походу проверяем не попал ли таргет в поле зрения. Как только таргет примерно впереди - следуем прицелом за ним и стреляем с припуском в надцать градусов. таким образом боты перестают крутиться вокру друг-друга и в то е время не летают прямо если ты сзади.. Функцию постить не буду, потому как там завязка на треть всего кода.
А по поводу второго у меня работала ф-ция, боты либо облетали либо останавливались перед друг-другом. Но возможно я ее редактировал, так что не гарантирую работоспособность, вобщем просто пример:
Код:

Function Scan(ou,tu);+
    u.Unit=Object.Unit(EntityName(ou))
    d=20;+u\mass Shr 1;*.5
   
    Touch1= EntityPick (u\scan,d);:RotateEntity u\scan,0,0,0
    If tu And u\speed#>1 PointEntity u\scan,tu:Touch2= EntityPick (u\scan,d)
    If (Touch1 Or Touch2)  Then
        RotateEntity u\scan,-15,0,0,0
        ;если ПОМЕХА ВВЕРХУ тогда поворачиваем сканер ВНИЗ на 15
        If EntityPick(u\scan,d) Then
            RotateEntity u\scan,15,0,0,0
            ;если ПОМЕХА ВНИЗУ тогда поворачиваем сканер ВВЕРХ-ВЛЕВО на 15-15
            If EntityPick(u\scan,d) Then
                RotateEntity u\scan,-15,-15,0,0
                ;если ПОМЕХА ВВЕРХ-ВЛЕВО тогда поворачиваем сканер ВНИЗ-ВПРАВО на 15-15
                If EntityPick(u\scan,d) Then
                    RotateEntity u\scan,15,15,0,0
                    ;если ПОМЕХА ВЕЗДЕ тогда ОСТАНАВЛИВАЕМ ДВИГАТЕЛЬ
                    If EntityPick(u\scan,d) Then
                        RotateEntity u\scan,0,0,0,0
                        i = 5
                    Else
                        RotateEntity u\scan,0,0,0,0
                        i = 4
                    EndIf
                Else
                    RotateEntity u\scan,0,0,0,0
                    i = 3
                EndIf
            Else
                RotateEntity u\scan,0,0,0,0
                i = 2
            EndIf
        Else
            RotateEntity u\scan,0,0,0,0
            i = 1
        EndIf
        i = 1
    Else
        RotateEntity u\scan,0,0,0,0
        i = 0
    EndIf
    Return i
   
;    u.Unit_humans=Object.Unit_humans(EntityName(t))
;    If  (u\state=9) Then Return 1 Else Return 2
End Function

непомню что я там с ней делал, но вобсчем принцип понятен. Скан это хайднутый пивот внутри корабля

Bagration 19.04.2008 18:59

Ответ: Бот-самолёт
 
Цитата:

Сообщение от H@NON (Сообщение 79692)
в аттаче отрывок какой то статьи на тему самолетов, там вроде объясняется как нужно делать ИИ бота, но вот жаль статья не полная :(

Попробуй найти все части. :(

H@NON 19.04.2008 22:13

Ответ: Бот-самолёт
 
Цитата:

Сообщение от Bagration (Сообщение 79810)
Попробуй найти все части. :(

Еслиб еще хоть что нить знать об том что ты ищешь, тогда бы можно было попытаться, а так гиблое дело...

tormoz 20.04.2008 17:01

Ответ: Бот-самолёт
 
Раздули проблему на ровном месте
я делал леталки с незапамятных времен
Последняя с ньютоном - практически готовая игра. но заброшена без графики. (меню, режимы игры и тд все есть)

Обычный примитивный ИИ без каких то там сложных взаимодействий
Если сделать с состояниями, так вообще просто.

Конкретизируй проблему.


Часовой пояс GMT +4, время: 18:27.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot