Показать сообщение отдельно
Старый 09.07.2009, 19:27   #1
Nuprahtor
Элита
 
Аватар для Nuprahtor
 
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений
(для 3,923 пользователей)
Проблемы с CollisionN(X,Y,Z) и Collision(X,Y,Z)

Возникла проблема с этими командами.
Здесь код, с помощью которого я делаю некое подобие декалей (взял из одного примера):

 nx#=0
			ny#=0
			nz#=0
			num#=CountCollisions(bul\model)
			For i=1 To num
				nx=nx+CollisionNX(bul\model,i)
				ny=ny+CollisionNY(bul\model,i)
				nz=nz+CollisionNZ(bul\model,i)
				x#=x#+CollisionX(bul\model,i)
				y#=y#+CollisionY(bul\model,i)
				z#=z#+CollisionZ(bul\model,i)
			
			nx=nx/num
			ny=ny/num
			nz=nz/num
			x=x/num
			y=y/num
			z=z/num


Здесь вычисляется угол столкновения между двух объектов. Когда пуля bul\model сталкивается с уровнем, на месте столкновения появляется спрайт:

dec.decal = New decal
			dec\sprite = CopyEntity (scorchsprite)
			dec\life# = 0.8
			RotateSprite dec\sprite,Rand(360)
			temp#=0.3+Rnd(0.6)
			ScaleSprite dec\sprite,temp#,temp#
			PositionEntity dec\sprite,x,y,z
			AlignToVector dec\sprite,-nx,-ny,-nz,0
			MoveEntity dec\sprite,0,0,-0.2
			DebugLog "Decal created at " +x+""+y+""+z
При одиночном столкновении никаких проблем нет. Но когда пули создаются не по одиночке, а по несколько (дробь из ружья), то при одновременном столкновении спрайты создаются на расстоянии. То есть, если одновременно столкнулись три пули, то первый спрайт будет на месте столкновения, второй через некоторое расстояние, также как и третий.
Есть ли какя-либо возможность отсортировать столкновения посредствами блитцевский команд коллизий?
(Offline)
 
Ответить с цитированием