Тема: xfreeEntity
Показать сообщение отдельно
Старый 25.10.2011, 16:15   #10
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: xfreeEntity

Включи лог и посмотри на хендлы кубов. Они повторяются - новый куб может быть создан на месте старого, т.к. размеры объектов одинаковые и аллокатору удобно засунуть новый объект на место старого.
При этом в r\target все еще хранится указатель на объект, который может быть уже не тем первоначальным объектом.

Type target
	Field entity
	Field speed#
	Field r.Reader
End Type

Function Target(x#,y#, withObject=0)
	Local t.target = New target
	t\entity = xCreateCube()
	xPositionEntity t\entity,x,y,0
	xScaleEntity t\entity,.3,.3,.3
	t\speed = -Rnd(.05,.08)
	
	If withObject = 1 Then t\r = Reader(t\entity)
End Function

Function Target_update()
	Local t.target
	For t.target = Each target
		xTranslateEntity t\entity,0,t\speed,0
		If xEntityY(t\entity)<0 Then 
			xFreeEntity t\entity: t\entity=0
			If t\r <> Null
				t\r\target = 0
			EndIf
			Delete t
		EndIf
	Next
End Function

Type Reader
	Field entity
	Field target
End Type

Function Reader.Reader(entity)
	r.Reader = New Reader
	r\entity = xCreateCube(): xEntityColor r\entity,255,0,0: xEntityAlpha r\entity,.5
	r\target = entity
	Return r
End Function

Function Reader_update()
	For r.Reader = Each Reader
		If r\target>0 Then xPositionEntity r\entity, xEntityX(r\target,1), xEntityY(r\target,1),0
	Next
End Function
__________________

(Offline)
 
Ответить с цитированием