Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 08.01.2009, 15:53   #1
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 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
Проверяем и тут этот БАГ пули создаются не на нем а где-т орядом, прчем летят вообще ну туда

Долго и упорно копался пытаясь как-то исправить, пришел к выводу что это все из за моих поворотов
У меня меш позиционируется в пивот и это почему-то вызывает ошбки
Но почему? Он же летает хорошо. Я очень прошу помочь мне. Может есть другие способы написать такое разворот?
Заранее спасибо )
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Старый 08.01.2009, 16:04   #2
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Пролема при написании ИИ

Скрин
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Старый 08.01.2009, 16:34   #3
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Re: Пролема при написании ИИ

а зачем писать новый поворот если намного легче исправить стрельбу... кратко вообщем создай 2 пивота чайлда для самолета, один на пушке, другой чуть дальше, и так создавай пули заставляя их летет по вектору...
(Offline)
 
Ответить с цитированием
Старый 08.01.2009, 16:38   #4
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Пролема при написании ИИ

Ну да ) А проблема та в том что пишешь им создаваться на пушке а они создаются вообще где-то в другом место да и по разному
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Старый 08.01.2009, 16:41   #5
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Re: Пролема при написании ИИ

)) ну тогда выложи код и медию чтоб можно было проверить, потомучто такого быть недолжно, и ты гдето просто напортачил
(Offline)
 
Ответить с цитированием
Старый 13.01.2009, 13:08   #6
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Пролема при написании ИИ

EvilChaotic, ух накодил... если чесно то тут трудно разобратся !!
как вариант, могу посоветовать создать анимацию плавного разворота в 3Д-редакторе, а потом при достижении цели просто проиграть эту анимацию, а с пивотом все оставить как было раньше !!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (27.01.2009)
Старый 13.01.2009, 20:06   #7
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Пролема при написании ИИ

IGR прекращай давать советы
совсем.
Ты уже задрал своим бредом
__________________
(Offline)
 
Ответить с цитированием
Старый 14.01.2009, 00:20   #8
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Re: Пролема при написании ИИ

нда, раз уж тему подняли хочу спросить - как может помочь анимация плавного разворота при созданий пуль ?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (27.01.2009)
Старый 14.01.2009, 18:23   #9
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Пролема при написании ИИ

IGR прекращай давать советы
совсем.
Ты уже задрал своим бредом
договорились !!
буду только с днями рождениями поздровлять !!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (27.01.2009)
Старый 17.01.2009, 01:18   #10
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Пролема при написании ИИ

EvilChaotic, я не разбирался в твоём коде, у меня тоже бывали подобные случаи. Я экспортил объекты из макса. И сдвинув локальные оси кординат объекта в редакторе, экспортируя в блитз у меня возникала проблема с кординатами пуль и.т.д. Попробуй проверить векторы кординат твоей модели паралельны кординатным векторам сцены. Мне это помогало
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (27.01.2009)
Старый 26.02.2009, 23:08   #11
phoenix29
AnyKey`щик
 
Аватар для phoenix29
 
Регистрация: 13.01.2009
Сообщений: 10
Написано одно полезное сообщение
Ответ: Пролема при написании ИИ

EvilChaotic, я не понял, а функция создания пули здесь есть? Или я что-то просмотрел?
Вобщем у меня тоже бывали подобные глюки и не раз. Ты как позиционируешь пулю? Я просто в коде этого не нашёл, возможно ты этот код не выложил. Когда пулю позиционируешь, то можно не давать её родство с объектом, а позиционировать в координаты(причём глобальные, если объект дочерний) самого объекта, поворачивать пули на углы поворота нужного тебе объекта и просто пускать по Z вперёд) однако если пуля летит в нужном направлении но всё-равно появляется рядом с самолётом, то значит у тебя не отцентрирована сама модель самолёта. Попробуй поставить модель в коорд. 0 0 0 и ту да же сферу, увидишь смещение.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (25.03.2009)
Старый 27.02.2009, 01:21   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (25.03.2009)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пролема с коллизиями christian [I <3 Blitz3D] 3D-программирование 9 09.02.2009 19:50
Статика при написании библиотек. @lex Основной форум 4 15.01.2007 17:17


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com