|
3D-программирование Вопросы, касающиеся программирования 3D мира |
08.01.2009, 15:53
|
#1
|
Мастер
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений (для 3,006 пользователей)
|
Пролема при написании ИИ
Я иногда так ненавижу этот блитц......
Вообщем хотел написать ИИ маленький самолета будущего
Точнее я уже написал но тут меня обломал страшный баг
Я уже второй день умираю, не могу ничего с ним поделать
Моя идея была такая пускай будет стандартный , пивотный ИИ
Type FlyObject
Field Mesh%,P_Mesh% :Меш, пивот в меше
;AI Data
Field Target%,TField% ;пивот за которым будет гонятся самолет
End Type
Сделаем функцию его создания.
Function CreateHawk(x%,y%,z%)
SH.FlyObject= New FlyObject
SH\Mesh% = CopyEntity(SerpHawk_Mesh%): ShowEntity SH\Mesh;Меш
SH\P_Mesh%=CreatePivot() ; Пивот в нем
SH\Target%=CreatePivot() ; его цель
SH\TField%=CreatePivot() ; и пивот рядом с корорым будет появлятся цель
PositionEntity SH\P_Mesh%,x,y,z ;ставим пивот в меше
PositionEntity SH\Mesh,EntityX(SH\P_Mesh,1),EntityY(SH\P_Mesh,1),EntityZ(SH\P_Mesh,1);в него ставим сам меш
PositionEntity SH\TField%,x,y,z ; ставим поле
tx# = EntityX(SH\TField%)+Rand(-100,100) загадываем числа
tz# = EntityZ(SH\TField%)+Rand(-100,100)
PositionEntity SH\Target,tx#,TerrainY(Terrain,tx#,0,tz#)+Rand(20,50),tz# ;ставим цель в любое место рядом с SH\TField
End Function
И вот что я хочу сделать и в этом и заключается главная проблема
Я очень хотел сделать хорошую систему разворотов, вот так:
вот летит она к пивоту по прямой достигает близкой дистанции <20
Пивот Target перепозиционируется по случайным числам он разворачивается к нему, летит, достигает и так бесконечно
Сам разворот я хочу сделать такой и я его сделал
достигнув одного пивота он должен тутже устремляться в другой но меш при этом должен плавно разворачиваться к пивоту.
Сделаем функцию апдейта самолета
Function UpdateSH2()
For SH.FlyObject = Each FlyObject
If EntityDistance(SH\P_Mesh,SH\Target)<20 ;проверяем не достиг ли самолет цели если дотиг то
tx# = EntityX(SH\TField%)+Rnd(-100,100);*0.6 ; згадываем числа
tz# = EntityZ(SH\TField%)+Rnd(-100,100);*0.6
PositionEntity SH\Target,tx#,TerrainY(Terrain,tx#,0,tz#)+Rand(20,50),tz# ; перепозицыонируем пивот
EndIf
CurvePointEntityXY(SH\Mesh,SH\Target,0.6,0.6) ;плавно направляем меш на пивот
PointEntity SH\P_Mesh,SH\Target ;мгновенно направляем пивот который отвечает за путь
MoveEntity SH\P_Mesh,0,0,0.12 ;двигаем этот пивот
PositionEntity SH\Mesh,EntityX(SH\P_Mesh,1),EntityY(SH\P_Mesh,1),EntityZ(SH\P_Mesh,1); ставим меш на пивот
Next
End Function
И все готово проверям.......самолет летает и разворачивается как я хотел и вродебы все хорошо, и я полон радости
НЕ проверив какже будут на нем создаватся пули я начал дальше делать боевую систему, и сделал ее
Function UpdateSH()
For SH.FlyObject = Each FlyObject
dst%=300
dent%=0
If EntityDistance(PlayerMesh%,SH\P_Mesh)<dst%
dst% = EntityDistance(PlayerMesh%,SH\P_Mesh)
dent% = PlayerMesh%
EndIf
If dent<>0
If SH\Otkat=0
If EntityDistance(dent%,SH\P_Mesh)<dst% And EntityDistance(dent%,SH\P_Mesh)>50
CurvePointEntityXY(SH\Mesh,dent%,0.8,0.8)
PointEntity SH\P_Mesh,dent%
SH\Reload_Time%=SH\Reload_Time%+1
If SH\Reload_Time%>20
CreateBullet(SH\Mesh)
SH\Reload_Time%=0
End If
ElseIf EntityDistance(dent%,SH\P_Mesh)<50
SH\Otkat=1
End If
Else ;SH\Otkat=1
SH\TimeOtkat%=SH\TimeOtkat%+1
If EntityDistance(SH\P_Mesh,SH\Target)<40
tx# = EntityX(SH\TField%)+Rnd(-100,100);*0.6
tz# = EntityZ(SH\TField%)+Rnd(-100,100);*0.6
PositionEntity SH\Target,tx#,TerrainY(Terrain,tx#,0,tz#)+Rand(20,50),tz#
EndIf
CurvePointEntityXY(SH\Mesh,SH\Target,0.6,0.6)
PointEntity SH\P_Mesh,SH\Target
If SH\TimeOtkat%=>1500
SH\Otkat=0
SH\TimeOtkat%=0
End If
End If
Else
If EntityDistance(SH\P_Mesh,SH\Target)<20
tx# = EntityX(SH\TField%)+Rnd(-100,100);*0.6
tz# = EntityZ(SH\TField%)+Rnd(-100,100);*0.6
PositionEntity SH\Target,tx#,TerrainY(Terrain,tx#,0,tz#)+Rand(20,50),tz#
EndIf
CurvePointEntityXY(SH\Mesh,SH\Target,0.6,0.6)
PointEntity SH\P_Mesh,SH\Target
EndIf
MoveEntity SH\P_Mesh,0,0,0.12
PositionEntity SH\Mesh,EntityX(SH\P_Mesh,1),EntityY(SH\P_Mesh,1),EntityZ(SH\P_Mesh,1)
Next
End Function
Ив от теперь самолет умеет заходить на атаку если видит врага , ну и просто летать. Настал главны момент: теперь можно сделать чтобы он еще и стрелял ) Впиши все нужное в тип и поехали
If SH\Reload_Time%>20
CreateBullet(SH\Mesh)
SH\Reload_Time%=0
End If
Проверяем и тут этот БАГ пули создаются не на нем а где-т орядом, прчем летят вообще ну туда
Долго и упорно копался пытаясь как-то исправить, пришел к выводу что это все из за моих поворотов
У меня меш позиционируется в пивот и это почему-то вызывает ошбки
Но почему? Он же летает хорошо. Я очень прошу помочь мне. Может есть другие способы написать такое разворот?
Заранее спасибо )
|
(Offline)
|
|
08.01.2009, 16:04
|
#2
|
Мастер
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений (для 3,006 пользователей)
|
Ответ: Пролема при написании ИИ
Скрин
|
(Offline)
|
|
08.01.2009, 16:34
|
#3
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Пролема при написании ИИ
а зачем писать новый поворот если намного легче исправить стрельбу... кратко вообщем создай 2 пивота чайлда для самолета, один на пушке, другой чуть дальше, и так создавай пули заставляя их летет по вектору...
|
(Offline)
|
|
08.01.2009, 16:38
|
#4
|
Мастер
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений (для 3,006 пользователей)
|
Ответ: Пролема при написании ИИ
Ну да ) А проблема та в том что пишешь им создаваться на пушке а они создаются вообще где-то в другом место да и по разному
|
(Offline)
|
|
08.01.2009, 16:41
|
#5
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Пролема при написании ИИ
)) ну тогда выложи код и медию чтоб можно было проверить, потомучто такого быть недолжно, и ты гдето просто напортачил
|
(Offline)
|
|
13.01.2009, 13:08
|
#6
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Пролема при написании ИИ
EvilChaotic, ух накодил... если чесно то тут трудно разобратся !!
как вариант, могу посоветовать создать анимацию плавного разворота в 3Д-редакторе, а потом при достижении цели просто проиграть эту анимацию, а с пивотом все оставить как было раньше !!
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.01.2009, 20:06
|
#7
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Пролема при написании ИИ
IGR прекращай давать советы
совсем.
Ты уже задрал своим бредом
__________________
|
(Offline)
|
|
14.01.2009, 00:20
|
#8
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Пролема при написании ИИ
нда, раз уж тему подняли хочу спросить - как может помочь анимация плавного разворота при созданий пуль ?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.01.2009, 18:23
|
#9
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Пролема при написании ИИ
IGR прекращай давать советы
совсем.
Ты уже задрал своим бредом
|
договорились !!
буду только с днями рождениями поздровлять !!
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.01.2009, 01:18
|
#10
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Пролема при написании ИИ
EvilChaotic, я не разбирался в твоём коде, у меня тоже бывали подобные случаи. Я экспортил объекты из макса. И сдвинув локальные оси кординат объекта в редакторе, экспортируя в блитз у меня возникала проблема с кординатами пуль и.т.д. Попробуй проверить векторы кординат твоей модели паралельны кординатным векторам сцены. Мне это помогало
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.02.2009, 23:08
|
#11
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 10
Написано одно полезное сообщение
|
Ответ: Пролема при написании ИИ
EvilChaotic, я не понял, а функция создания пули здесь есть? Или я что-то просмотрел?
Вобщем у меня тоже бывали подобные глюки и не раз. Ты как позиционируешь пулю? Я просто в коде этого не нашёл, возможно ты этот код не выложил. Когда пулю позиционируешь, то можно не давать её родство с объектом, а позиционировать в координаты(причём глобальные, если объект дочерний) самого объекта, поворачивать пули на углы поворота нужного тебе объекта и просто пускать по Z вперёд) однако если пуля летит в нужном направлении но всё-равно появляется рядом с самолётом, то значит у тебя не отцентрирована сама модель самолёта. Попробуй поставить модель в коорд. 0 0 0 и ту да же сферу, увидишь смещение.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.02.2009, 01:21
|
#12
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,356
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Пролема при написании ИИ
CreateBullet(SH\Mesh)
Обрати внимание на функцию.
Ты там извлекаешь координаты меша верно?
Так вот они у тебя скорее всего выдаются локальные, а нужны глобальные.
ЗЫ
EntityX#(mesh) - ни есть правельный способ
EntityX#(mesh, true) - выдаёт глобальные(мировые) координаты
если второй параметр не указан, то там False и блиц выдаёт координаты относительно пивота, которые воспринимаются как глобальные.
Посмотри, может проблема в этом.
Кстати на аватарке ты?
Там просто футболка с эмблемой магазина Castle Rock.
Вот я и подумал может ты тоже из Питера.
Могли бы чёнить вместе замутить.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:47.
|