Показать сообщение отдельно
Старый 08.02.2008, 21:57   #32
jimon
 
Сообщений: n/a
Ответ: Вопрос про наболевшее - коллизии.

оффтоп на тему blitz3d

эх ... или блиц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 рулз
 
Ответить с цитированием