Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 08.02.2008, 21:53   #31
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Jimon имел ввиду секционную разбивку. которую в идеале надо делать. и кстати, как седлать ее в блице - хз. хотя я писал либу.
(Offline)
 
Ответить с цитированием
Старый 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 рулз
 
Ответить с цитированием
Старый 08.02.2008, 22:09   #33
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

элементарно Ватсон, ввели какую нибудь магию которая удаляет ВСЕ пули в некотором радиусе.
(Offline)
 
Ответить с цитированием
Старый 08.02.2008, 22:34   #34
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

ну и при каких еще условиях надо удалять переменую, а ?

пуля в любых условиях существования удаляется в двух случаях :
1) c чем-то ударились
2) улетели далеко (на первой космической и вращаемся на орбите)

потому ИМХО их СВОИХ взглядов я не вижу смысла
вводить такую переменую удаления ...
а то пуля будет колизится с кучей обьектов и всех поубивает и только
потом удалится

с моей точки зрения такой примитивизм blitz3d показывает что ооп в blitzmax рулз
Ерунду написал
На блитц3д без всяких ооп и так все работает быстро и четко если код грамотно построен
За один проход цикла она никак "всех поубивает"
На коллижн ставим стоп и удаляем
Какие проблемы ?

зы. все эти холливары исключительно от недостатка опыта и буйной фантазии. )))
__________________
(Offline)
 
Ответить с цитированием
Старый 08.02.2008, 22:51   #35
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

с коллизиями да. а если без них?
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 00:26   #36
DEGABB
AnyKey`щик
 
Регистрация: 03.01.2007
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Вопрос Ответ: Вопрос про наболевшее - коллизии.

Сообщение от jimon Посмотреть сообщение
оффтоп на тему 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 рулз
Ой-ой-ой! Что тут началось, из-за того, что я не полностью описал проблему. Ситуация гораздо проще:
1) Вид сверху! (Почти 2D), поэтому ни про какую траекторию пули не надо заморачиваться.
2) Скорость пули тоже постоянна.
3) Боты двигаются в одной плоскости с пулей (т.е. почти земле), поэтому она всегда врежется либо в бота, либо в ограждение уровня, либо в другую пулю. При любом столкновении (как это написать?) она исчезнет.
4) Говорят, что при движении и ботов, и пули следует создавать 2 коллизии: бот-пуля и пуля-бот, так вот! ещё и не понятно, почему иногда срабатывает одна, иногда - другая коллизия?
5) Все боты относятся к типу tank и двигаются-думают в цикле:
For bot.tank=Each tank
.....
Next
Где лучше проверять коллизию? В Этом цикле или в общем "игровом" цикле?
6) Даже на такую строчку (неважно, где она написана, либо внутри цикла ботинков, либо внутри игрового цикла):
If (EntityDistance# (player1\bul,bot\ent))<2 Then Stop
BB выдаёт ошибку "переменная должна быть типом"

[player1\bul - сам кубик пули, созданный примитивным
player1\bul=CreateCube()
а вот bot\ent созданна через
bot.tank=New tank
bot\ent=CreateCube()
где
Type tank
Field ent; entity
Field dir; direction-направление
Field sp#; скорость
End Type
и ничего больше]

Вобщем, как при попадании пули в бота убивать НУЖНОГО бота,
в то время как пуля должна сама исчезнуть при ЛЮБОМ попадании?

Ух! Вроде б вопрос-то несложный, но что-то запарился уже.

И ещё вопросик: почему обещанный HideEntity, который скрывает объект от глаз и КОЛЛИЗИЙ, иногда всё-таки срабатывает на коллизии EntityCollided?

Последний раз редактировалось DEGABB, 09.02.2008 в 00:44.
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 02:02   #37
dimond
Оператор ЭВМ
 
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений
(для 5 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Сообщение от tormoz Посмотреть сообщение
используй не массивы, а типы (удобнее)
Но человек просил с массивом! не в моих принципах отвечать типа: чувак используй типы, они круче всех. А если ему Надо_было_только_с_массивом?
Вот я и набросал как это можно сделать, хочя и знал что лучше сделать через типы.
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 02:12   #38
-=SCiP=-
ПроЭктировщик
 
Аватар для -=SCiP=-
 
Регистрация: 23.09.2007
Сообщений: 126
Написано 11 полезных сообщений
(для 16 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Люди есть вариант. Не знаю как вы одобрите.!
Если сделать через EntityPickMode типа прицел направлен на объект. Сразу определяется в Dim какой это объект. И при нажатии выстрела просто вылетает пуля а объект удаляется. Это все без коллизии.
Но пуля должна двигается быстро чтоб не получилась объект удалился а пуля только настигла его!
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 02:14   #39
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Блин
Делай с коллизиями без всяких дистанций- быстрее работает

Если хочешь дистанции, то придется обрабатывать внутри цикла пуль цикл ботов:

For o.shot=Each shot
 MoveEntity o\ent,0,0,o\speed
 
CollidedBot(o.shot)
o\time=o\time+1

If o\time>=400
  FreeEntity o\ent
  Delete o
endIf
Next

Function CollidedBot(o.shot)
For bot.tank=Each tank
 dist#=EntityDistance(o\ent,bot\ent)
 If dist<5
   BigBang(bot\ent) ;взрыв танка
   bot\del=1 ;флаг удаления танка
   o\time=400 ;флаг удаления пули
 endif 
Next
End Function
__________________
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 04:08   #40
dimond
Оператор ЭВМ
 
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений
(для 5 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Сообщение от tormoz Посмотреть сообщение
Ерунда, а не код
высавил коллизию пуля-танк, а проверяешь танк-пуля
Обьясни в чем разница. Ведь работало правильно, поэтому не обратил особого внимания.
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 05:22   #41
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Сообщение от dimond Посмотреть сообщение
Обьясни в чем разница. Ведь работало правильно, поэтому не обратил особого внимания.
Collisions type_1,type_2,1,1

Коллизия происходит между первым и вторым типом
То есть, если движется первый тип, то коллизия будет, а если только второй - то нет

Твой код работал только тогда, когда танки двигались
Компрене ?
__________________
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 05:47   #42
dimond
Оператор ЭВМ
 
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений
(для 5 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

В том то и дело что не двигались. я просто натыкал неподвижных обьектов в пространстве. вот еще раз проверил, проверка всеравно срабатывает так.
---
При перемене местами типов коллизия не срабатывает.
так что зря ты это так поспешил с выводами.
возможно дело в том что счетчик для массива, а не как принято:
For s.shot=Each shot
...
if EntityCollided(s\entity,BOT_C) ...
...
Next
но я могу ошибаться

Последний раз редактировалось dimond, 09.02.2008 в 06:06.
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 17:20   #43
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

О_о коллизия работает быстрее?
это точно?
я чесно сказать не проверял, но ведь при коллизии еще дофига всего проверяется, точка коллизии, смещение объекта, который коллизится куда-нибудь, еще наверное какие нибудь рассчеты?
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 19:16   #44
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

ы? я тоже думал что дистанс быстрее коллизии 0.о
(Offline)
 
Ответить с цитированием
Старый 09.02.2008, 20:08   #45
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Вопрос про наболевшее - коллизии.

Сообщение от Raiter Посмотреть сообщение
ы? я тоже думал что дистанс быстрее коллизии 0.о
Проверь
Коллизия сфера-сфера работает быстрее дистанса
Особенно если много объектов - это заметно
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
коллизии в 2.5D cheaters-hater 2D-программирование 11 07.07.2009 00:33
Уже наболевшее.. Samarik 3D-программирование 41 20.07.2008 03:22
Вопрос про коллизии TG 3D-программирование 6 09.11.2007 01:39
Коллизии Stalnoy_Gvozd' 3D-программирование 6 30.08.2007 15:56
Вопрос по коллизии Fant 3D-программирование 24 03.11.2005 10:34


Часовой пояс GMT +4, время: 01:19.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com