Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием