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

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

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

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

Ответ
 
Опции темы
Старый 25.10.2006, 20:41   #1
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Смех Дыры от ПУЛЬ !!!

Как можно сделать чтобы попала пуля в дверь остался след , затем пуля не просто сдыхает а перемещяется дальше и выходит из двери остоется след , попадает в бота и тот сдыхает . Всмысле мне не недо говорить как сделать след от пули , А чтобы ана могла проходить с квозь стену и колизия работала.

И зачем нужна команда EntityBox
(Offline)
 
Ответить с цитированием
Старый 25.10.2006, 20:46   #2
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Дыры от ПУЛЬ !!!

не понял. что тебе надо? если ты хочешь что-бы пуля проходила сквозь стену, то им не нужна колизия. дырки рисуй спрайтами. или я неправильно тебя понял....
(Offline)
 
Ответить с цитированием
Старый 25.10.2006, 21:04   #3
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Re: Дыры от ПУЛЬ !!!

да. дыры спрайтами, пулю,при соприкосновении с дверью, просто перемещаешь по траектори не много дальше(учитывая толщину двери) и всё.
(Offline)
 
Ответить с цитированием
Старый 25.10.2006, 23:08   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Дыры от ПУЛЬ !!!

Зачем тогда коллизия?
Если хочешь фиксировать акт коллизи без реакции системы, то поставь в Collisions response в ложь.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 26.10.2006, 09:37   #5
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Дыры от ПУЛЬ !!!

Зачем тогда коллизия?
Если хочешь фиксировать акт коллизи без реакции системы, то поставь в Collisions response в ложь.
Незнаю чегото не получается.
(Offline)
 
Ответить с цитированием
Старый 26.10.2006, 13:24   #6
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Дыры от ПУЛЬ !!!

После определения коллизии пули со стенкой, ставь на нее спрайт дырки, потом отключай коллизию пули с помощью EntityType() - второй параметр на 0 поставь, потом двигай пулю вперед, потом опять ставь EntityType() такой, который был до этого. Ну и так с каждой стенкой, пока энергия пули не иссякнет
(Offline)
 
Ответить с цитированием
Старый 26.10.2006, 22:54   #7
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Дыры от ПУЛЬ !!!

Принцип понял. Но после того как остается первая дыра пуля не проверяется на столкновение. Буду парится если так и не получится то буду просить помощи.
(Offline)
 
Ответить с цитированием
Старый 27.10.2006, 00:00   #8
Nunan
Оператор ЭВМ
 
Регистрация: 23.10.2006
Сообщений: 39
Написано одно полезное сообщение
(для 0 участников)
Re: Дыры от ПУЛЬ !!!

Я предлогаю другой принцип:
надо выпускать не одну а две пули (вторую можно просто - pivot), одна будет с колизией относительно стен, а другая относительно людей-ботов.
Когда эта двойная пуля летит то есть два варианта:
- она попадает в стену, одна остаётся, вторая летит дальше, и создаётся опять пуля(с колизией относительно стен)...
- когда пуля (с колизией относительно ботов) попадет в тело то делается необходимый просчет попадания (урон, спраиты всякие)... И можно сделать чтобы пуля после пробивания тела летела дольше...
При попаданиях пули (первой или второй) уменьшается число её силы и когда она очередной раз врезалась то просто удаляешь её.

Программа по моему типа такой:
(пуля состоит из двух частей пуля1 и пуля2 )
Пуля
Пуля1
Пуля2

For i=1 to (количество пуль)
if (пуля существует) then

if (пуля1 не существует) then (Создать пулю1)
if (пуля2 не существует) then (Создать пулю2)

if (пуля1 врезалась) then
(Поросчёт следвия попадания...)
(удалить пулю1)
end if
if (пуля2 врезалась) then
(Поросчёт следвия попадания...)
(удалить пулю2)
end if

MoveEntity (обе пули),0,0,+0.01

end if
next
(Offline)
 
Ответить с цитированием
Старый 27.10.2006, 03:15   #9
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Дыры от ПУЛЬ !!!

А вообще, лучше попадание пули проверять с помощью CameraPick(), так как скорость пули большая, и ею можно пренебречь. А например для крупнокалиберных снарядов (гранаты, ракеты) уже делать проверку коллизией.
Принцип действия с CameraPick() примерно такой же:
;Обнуляем стек стенок :)
;В который потом будем складывать все "прошитые" пулей стенки
Wall_Stack(0) = 0
;собственно пикаем
If MouseHit(1) Then 
	;Запоминаем координаты, куда мы пикнули
	mx = MouseX()
	my = MouseY()
	;Пикаем по координатам
	Pick = CameraPick(Camera, mx,my)
;Метка для цикла проверки
.LoopPick
	;Уменьшаем энергию пули
	Bullet_Energy = Bullet_Energy - 1
	;Если энергия пули не иссякла
	If (Bullet_Energy > 0) Then
		;Начинаем проверку того, во что попали
		;Если это стенка
		If (Pick = Wall) Then
			;Здесь ставим спрайт дырки на стенку
			;Запоминаем "пикнутую" стенку в стек
			;Первый элемент массива используем как счетчик
			;Чтобы избежать лишних переменных
			Wall_Stack(0) = Wall_Stack(0) + 1
			Wall_Stack(Wall_Stack(0)) = Pick
			;Потом убираем проверку пика у всех стенок на пути следования пули
			For i = 1 To Wall_Stack(0)
				EntityPickMode(Wall_Stack(i), 0)
			Next
			;Опять пикаем те же координаты
			Pick = CameraPick(pPlayer\Head, mx,my)
			;Возвращаем проверку пика всем стенкам обратно
			For i = 1 To Wall_Stack(0)
				EntityPickMode(Wall_Stack(i), 2)
			Next
			;возвращаемся обратно для проверки следующего "пикнутого" обьекта
			Goto LoopPick
		;Если же пикнутый обьект это бот
		ElseIf (Pick = Bot) Then
			;Уменьшаем энергию бота
			Bot_Health = Bot_Health - 1
			;Тут можно всяких эффектов запихать
		EndIf
	EndIf
EndIf
Вобщем хреновое решение, но работает
А вообще тут необходимо использовать Типы вместе с Object\Handle, для быстрого доступа к ботам(для проверки) - он же не один будет я так понимаю.
Тоесть все стенки надо назвать Wall или как-нить подобно, и условие проверки будет такое
;.........................................
If EntityName(Pick) = "Wall"
	;..................
Else
	pBot = Object.bot(EntityName(Pick))
	If (pBot <> Null) Then
		pBot\Health = pBot\Health - 1
	EndIf
EndIf
;.........................................
ЗЫ
Надеюсь меня за Goto здесь не убьют?
(Offline)
 
Ответить с цитированием
Старый 29.10.2006, 22:24   #10
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Дыры от ПУЛЬ !!!

Спасибо за ответы . Тот способ который предложил Nunan хорош, но этот способ не будет оставлять обратных следов. И я тут придумал способ который по моему мнению должен работать(буду делать утром(утора вечера мудренее ))

Допустим возьмем не мощную пулю, которая способна пробить лишь две стены, после того как пуля попала в стену, создаем ей детя которое перемещяем чуть чуть в перед, затем пускаем её в перед, если произошла коллизия, то оставляем след от попадания, но так как на выходе из стены она не проверяется на столкновение, то после того как она попала в стену или прошла максимальное расстояние своей жизни создаем ей детя и отправляем его обратно(и оно оставит обратный след).
(Offline)
 
Ответить с цитированием
Старый 30.10.2006, 08:16   #11
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Дыры от ПУЛЬ !!!

Зачем такой гемор?

"Пикаешь" стенку
CameraPick()
получаешь координаты дырки с одной стороны стенки
PX = PickedX()
PY = PickedY()
PZ = PickedZ()
Ставишь спрайт дырки
Дальше применяешь LinePick() по этим же координатам, только с другой стороны
LinePick(PX, PY, PZ - 100, PX, PY, PZ)
И получаешь новые координаты
PX = PickedX()
PY = PickedY()
PZ = PickedZ()
Эти координаты и будут координатами дырки с обратной стороны стенки.
(Offline)
 
Ответить с цитированием
Старый 30.10.2006, 19:04   #12
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Дыры от ПУЛЬ !!!

Я понимаю, что мой метод содержит много гемора, но это даже лучше(помогает в изучении особенностей Блица) . Как не странно но мой метод работает(уря хоть что-то я сделал сам ).
Если кому нужен код то пожалуйста(кусок кода)

If EntityCollided(vvv\entity,TypeBAZA)
PROSTREL#=3
cx#=CollisionX( VVV\ENTITY,1 )
cy#=CollisionY( VVV\ENTITY,1 )
cz#=CollisionZ( VVV\ENTITY,1 )
;==================================

PositionEntity VVV\entity02,cx,cy,cz
RotateEntity VVV\entity02,EntityPitch(VVV\entity),EntityYaw(VVV \entity),0
MoveEntity vvv\entity02,0,0,PROSTREL
EntityType vvv\entity02,typepyl
EntityRadius vvv\entity02,.01

PositionEntity VVV\entity03,EntityX(vvv\entity02),EntityY(vvv\ent ity02),EntityZ(vvv\entity02)
RotateEntity VVV\entity03,EntityPitch(VVV\entity02),EntityYaw(V VV\entity02)+180,0
EntityType vvv\entity03,typepyl
EntityRadius vvv\entity03,.01
MoveEntity vvv\entity03,0,0,PROSTREL
MoveEntity vvv\entity02,0,0,400;если пуля прошла стену отровляем её дальше

;==================================
nx#=CollisionNX( VVV\ENTITY,1 )
ny#=CollisionNY( VVV\ENTITY,1 )
nz#=CollisionNZ( VVV\ENTITY,1 )
vvv\sprite=CopyEntity(vist)
PositionEntity VVV\sprite,cx,cy,cz
AlignToVector VVV\sprite,-nx,-ny,-nz,3
MoveEntity vvv\sprite,0,0,-.08
;==================================

ElseIf EntityCollided(vvv\entity,Typesteclo)
cx#=CollisionX( VVV\ENTITY,1 )
cy#=CollisionY( VVV\ENTITY,1 )
cz#=CollisionZ( VVV\ENTITY,1 )
nx#=CollisionNX( VVV\ENTITY,1 )
ny#=CollisionNY( VVV\ENTITY,1 )
nz#=CollisionNZ( VVV\ENTITY,1 )
vvv\sprite=CopyEntity(vist_02)
PositionEntity VVV\sprite,cx,cy,cz
AlignToVector VVV\sprite,-nx,-ny,-nz,3
MoveEntity vvv\sprite,0,0,-.08
vvv\sprite=CopyEntity(vist_02)
PositionEntity VVV\sprite,cx,cy,cz
AlignToVector VVV\sprite,nx,ny,nz,3
MoveEntity vvv\sprite,0,0,-.08
EndIf

;=================== Оброботка 2 пули
If EntityCollided(vvv\entity03,TypeBAZA)
cx#=CollisionX( VVV\ENTITY03,1 )
cy#=CollisionY( VVV\ENTITY03,1 )
cz#=CollisionZ( VVV\ENTITY03,1 )

nx#=CollisionNX( VVV\ENTITY03,1 )
ny#=CollisionNY( VVV\ENTITY03,1 )
nz#=CollisionNZ( VVV\ENTITY03,1 )
vvv\sprite=CopyEntity(vist)
PositionEntity VVV\sprite,cx,cy,cz
AlignToVector VVV\sprite,-nx,-ny,-nz,3
MoveEntity vvv\sprite,0,0,-.08
EndIf
If EntityCollided(vvv\entity02,TypeBAZA)
cx#=CollisionX( VVV\ENTITY02,1 )
cy#=CollisionY( VVV\ENTITY02,1 )
cz#=CollisionZ( VVV\ENTITY02,1 )

nx#=CollisionNX( VVV\ENTITY02,1 )
ny#=CollisionNY( VVV\ENTITY02,1 )
nz#=CollisionNZ( VVV\ENTITY02,1 )
vvv\sprite=CopyEntity(vist)
PositionEntity VVV\sprite,cx,cy,cz
AlignToVector VVV\sprite,-nx,-ny,-nz,3
MoveEntity vvv\sprite,0,0,-.08
EndIf

;

P.S....
Дыры остаются но они не прикрепляются к попавшим предметам(допустим дверь). Как лутше сделать чтобы пули присобачивались в попавший предмет.
ЗЫ не ругайте за мелкий шрифт комп опять глючит(или это я глючу)
P.S. Админестрация почему я немогу в расширенном режиме менять настройки размера шрифта

(Offline)
 
Ответить с цитированием
Старый 30.10.2006, 20:55   #13
jimon
 
Сообщений: n/a
Re: Дыры от ПУЛЬ !!!


или это я глючу
ты прав однако
 
Ответить с цитированием
Старый 31.10.2006, 02:25   #14
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Дыры от ПУЛЬ !!!

Vlad
Ну и зря, нужно добиваться простого и эффективного кода, а не геморроя
Насчет крепления дырок - просто припаренти ее после позиционирования с помощью EntityParent(). Тоесть если юзаешь коллизию, то узнаешь обьект с которым столкнулась пуля с помощью CollisionEntity() и парентишь спрайт дырки к нему. Перед удалением открепляешь.
ЗЫ
Проще надо быть
(Offline)
 
Ответить с цитированием
Старый 02.11.2006, 19:46   #15
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Дыры от ПУЛЬ !!!

Я делаю но они у меня как висели в воздухе так и весят.
Перед удалением открепляешь
Можно поподробней.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трёхмерные дырки от пуль Mr_F_ 3D-программирование 12 02.11.2009 19:02
Следы от пуль :rolleyes: Spy4433 3D-программирование 8 05.10.2009 04:52
Следы от пуль... butcher 3D-программирование 11 10.11.2007 13:30
Декали (дыры от пуль, кровь...) New 3D-программирование 16 24.08.2006 13:04
Дырки от пуль?? Sony 3D-программирование 1 08.06.2006 23:54


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


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