|
3D-программирование Вопросы, касающиеся программирования 3D мира |
08.02.2008, 21:53
|
#31
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
Jimon имел ввиду секционную разбивку. которую в идеале надо делать. и кстати, как седлать ее в блице - хз. хотя я писал либу.
|
(Offline)
|
|
08.02.2008, 21:57
|
#32
|
|
Ответ: Вопрос про наболевшее - коллизии.
оффтоп на тему 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
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
элементарно Ватсон, ввели какую нибудь магию которая удаляет ВСЕ пули в некотором радиусе.
|
(Offline)
|
|
08.02.2008, 22:34
|
#34
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
ну и при каких еще условиях надо удалять переменую, а ?
пуля в любых условиях существования удаляется в двух случаях :
1) c чем-то ударились
2) улетели далеко (на первой космической и вращаемся на орбите)
потому ИМХО их СВОИХ взглядов я не вижу смысла
вводить такую переменую удаления ...
а то пуля будет колизится с кучей обьектов и всех поубивает и только
потом удалится
с моей точки зрения такой примитивизм blitz3d показывает что ооп в blitzmax рулз
|
Ерунду написал
На блитц3д без всяких ооп и так все работает быстро и четко если код грамотно построен
За один проход цикла она никак "всех поубивает"
На коллижн ставим стоп и удаляем
Какие проблемы ?
зы. все эти холливары исключительно от недостатка опыта и буйной фантазии. )))
__________________
|
(Offline)
|
|
08.02.2008, 22:51
|
#35
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
с коллизиями да. а если без них?
|
(Offline)
|
|
09.02.2008, 00:26
|
#36
|
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
|
Оператор ЭВМ
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений (для 5 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
Сообщение от tormoz
используй не массивы, а типы (удобнее)
|
Но человек просил с массивом! не в моих принципах отвечать типа: чувак используй типы, они круче всех. А если ему Надо_было_только_с_массивом?
Вот я и набросал как это можно сделать, хочя и знал что лучше сделать через типы.
|
(Offline)
|
|
09.02.2008, 02:12
|
#38
|
ПроЭктировщик
Регистрация: 23.09.2007
Сообщений: 126
Написано 11 полезных сообщений (для 16 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
Люди есть вариант. Не знаю как вы одобрите.!
Если сделать через EntityPickMode типа прицел направлен на объект. Сразу определяется в Dim какой это объект. И при нажатии выстрела просто вылетает пуля а объект удаляется. Это все без коллизии.
Но пуля должна двигается быстро чтоб не получилась объект удалился а пуля только настигла его!
|
(Offline)
|
|
09.02.2008, 02:14
|
#39
|
Гигант индустрии
Регистрация: 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
|
Оператор ЭВМ
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений (для 5 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
Сообщение от tormoz
Ерунда, а не код
высавил коллизию пуля-танк, а проверяешь танк-пуля
|
Обьясни в чем разница. Ведь работало правильно, поэтому не обратил особого внимания.
|
(Offline)
|
|
09.02.2008, 05:22
|
#41
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
Сообщение от dimond
Обьясни в чем разница. Ведь работало правильно, поэтому не обратил особого внимания.
|
Collisions type_1,type_2,1,1
Коллизия происходит между первым и вторым типом
То есть, если движется первый тип, то коллизия будет, а если только второй - то нет
Твой код работал только тогда, когда танки двигались
Компрене ?
__________________
|
(Offline)
|
|
09.02.2008, 05:47
|
#42
|
Оператор ЭВМ
Регистрация: 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
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
О_о коллизия работает быстрее?
это точно?
я чесно сказать не проверял, но ведь при коллизии еще дофига всего проверяется, точка коллизии, смещение объекта, который коллизится куда-нибудь, еще наверное какие нибудь рассчеты?
|
(Offline)
|
|
09.02.2008, 19:16
|
#44
|
Гигант индустрии
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений (для 92 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
ы? я тоже думал что дистанс быстрее коллизии 0.о
|
(Offline)
|
|
09.02.2008, 20:08
|
#45
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Вопрос про наболевшее - коллизии.
Сообщение от Raiter
ы? я тоже думал что дистанс быстрее коллизии 0.о
|
Проверь
Коллизия сфера-сфера работает быстрее дистанса
Особенно если много объектов - это заметно
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
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, время: 05:39.
|