Показать сообщение отдельно
Старый 04.09.2005, 06:44   #19
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Уход от полного перебора

Как и обещал, расскажу, как улучшить цикл обработки выстрелов.
В Блитце есть недокументированные команды Handle и Object. Благодаря команде Handle можно получить
"указатель" на объект типа (использование термина "указатель" весьма спорно для Блитца). Например:
P.Player=New Player
pHANDLE=Handle(P)
а затем, используя сохранённое значение (здесь в переменной pHANDLE) получить доступ к элементу типа:
P.PLAYER=Object.PLAYER(pHANDLE)
*******
Модифицируем функцию create_bot
Function create_bot(x#,y#,z#)
	b.bot=New bot
	b\entity=CreateSphere()
	EntityType b\entity,BOTT
	PositionEntity b\entity,x#,y#,z#
	NameEntity b\entity,Handle(b)
	Return True
End Function
Командой NameEntity присвоим объекту B\entity имя - в данном случае, совпадающее с хендлом элемента типа,
содержащего данный объект.
Теперь модифим кусок функции update_shot()
Function update_shot()
	vs#=1
	max_dist#=1000
	For a.shot=Each shot
 MoveEntity a\entity,0,0,vs#
 a\dist#=a\dist#+vs#
 bot_h=EntityCollided(a\entity,BOTT)
 If a\dist#>max_dist#
 	FreeEntity a\entity
 	Delete a
 ElseIf EntityCollided(a\entity,TERRT)<>0
 	FreeEntity a\entity
 	Delete a
 ElseIf bot_h<>0
 	FreeEntity a\entity
 	Delete a
 	bhandle=EntityName(bot_h)
 	bc.bot=Object.bot(bhandle)
 	Delete bc
 	FreeEntity bot_h
 	create_bot(EntityX(user)+Rnd(-100,100),2,EntityZ(user)+Rnd(-100,100))
 EndIf
	Next
End Function
Здесь мы получаем указатель на элемент типа из имени бота (имени объекта, который его визуализирует - сферы)
bhandle=EntityName(bot_h)
далее удалям запись об этом боте (удаляем соответствующий элемент типа)
 	bc.bot=Object.bot(bhandle)
 	Delete bc
И, наконец, удаляем сам объект (используя его хендл)
FreeEntity bot_h
Таким образом, мы избавились от цикла и сохранили прежнюю функциональность, повысив при этом
производительность.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (05.10.2014)