эх ... или блиц3д так отстал от жизни ... или я торможу ...
имхо я бы написал етот код так ... может я и не прав .. но я пишу на blitzmax
архитектурные условия :
1) пуля ето такой же TWorldObject как и нпс и все остальное
2) у нас есть WorldManager у которого есть CollisionManager
3) CollisionManager работает по запросам, все TWorldManager
кидают в него запросы, а потом он всё ето обрабатывает
и хранит список обработаных запросов
4) у TWorldManager есть метод RemoveObject(obj:TWorldObject)
5) у TBulletObject есть метод CreateBoom()
в таком окружении метод Update у TBulletObject будет так выглядеть :
Method Update()
UpdatePhysic()
Local collision:TCollisionRequest = WorldManager.GetCollisionRequest(...)
if collision.objects.Count() > 0 then
local obj:TWorldObject = TWorldObject(collision.objects.First())
if obj.HpEnable = 1 then obj.Attack(BulletAtack)
CreateBoom()
WorldManager.RemoveObject(self)
return
end if
if (Millisecs() - createdtime) > 5000 then
WorldManager.RemoveObject(self)
return
end if
End Method
ну и при каких еще условиях надо удалять переменую, а ?
пуля в любых условиях существования удаляется в двух случаях :
1) c чем-то ударились
2) улетели далеко (на первой космической и вращаемся на орбите)
потому
ИМХО их
СВОИХ взглядов я не вижу смысла
вводить такую переменую удаления ...
а то пуля будет колизится с кучей обьектов и всех поубивает и только
потом удалится
с моей точки зрения такой примитивизм blitz3d показывает что ооп в blitzmax рулз