![]() |
Проверка попадания в бота.
Такой вопрос. Есть FPS, есть 10 ботов (Bot1, Bot2... Bot9). Как реализовать попадание из оружия в ботов. А как это сделать? Я пробовал LinePick, но он только изредка выдает вместо "0" какие-то цифры, как я понял, это имя объекта, а как его из цифр преобразовать в имя переменной? А можно сделать вот так? Например, создать бокс, который бы повторял радиус и дальность поражения от оружия, привязать его к стволу. А потом проверять на столкновение с ботами, но чтобы он возвращал имя объекта, с которым столкнулся. Только у меня все боты сидят на одном EntityType.
Как бы это все реализовать по-проще. Заранее благодарен. |
Re: Проверка попадания в бота.
|
Re: Проверка попадания в бота.
чета не понял у тебя боты это перменые?
жуть) попробуй с типами простой пример: Type TBot field ent ;модель бота filed hp ; колво жизни end type ;создаем 10 ботов в случайных позициях: for i=1 to 10 bt.TBot=new TBot bt\ent=createcube() bt\hp=100 ;вначаеле у бото 100 единиц здоровия entitypickmode bt\ent,2 ;чтобы можно было пикать по ботам positionentity bt\hp,rnd(-10,10),0,rnd(-10,10) next главный цикл: pick=camerapick(cam,mousex(),mousey()) ;перебираем всех ботов for bt.TBot=each TBot ;если кликнул на мыш и наведена мыш на бота то отнимаем у бота 10 хп if mousehit(1) and pick=bt\ent then bt\hp=bt\hp-10 ;если жизни меньше(равно 0) то уничтожаем бота if bt\hp<=0 then freeentity bt\ent : delete bt next это простой пример и не оч оптимезированный ну вроде понятный! ПС писал прям на форуме мог наврать... |
Re: Проверка попадания в бота.
Цитата:
Меня в дрожь берет от этих типов. Ну ладно, попробую с ними. Но можно этот код и без типов сделать? |
Re: Проверка попадания в бота.
Куда ж ты без типов-то... все равно придется их использовать.
|
Re: Проверка попадания в бота.
Скажи если тебе 100 ботов понадобяться ты тоже будеш писать bot1,bot2,..bot99,bot100? ручки не отвадяться?
|
Re: Проверка попадания в бота.
ну мошь и массивами
ну типы имхо круче! сделай тутор от импера все поймешь он очень хороший |
Re: Проверка попадания в бота.
Цитата:
P.S. Отвечаю всем - ну, у меня не 100 ботов, а 10. Но, спорить не буду, - типы это весело. Только сложно все это. |
Re: Проверка попадания в бота.
EntityPickMode go to help !!!
|
Re: Проверка попадания в бота.
Цитата:
|
Re: Проверка попадания в бота.
Блин я тебя не зря в хелп послал
Аниммеш - не меш а контейнер для меша на него НЕ ставится пицкмоде на полигоны Нужно перебирать все чайлды и ставить на каждый а ваще делай обычным радиусом и не мороч голову с полигонами. пикай по эллипсу (ссответственно и пицкмде на сферу ставь) Учись работать с типами - это очень просто и эффективно |
Re: Проверка попадания в бота.
[blitz]For i= 1 To CountChildren(entity)
Baby = GetChild(entity,i) EntityPickMode Baby, 2 Next [/blitz] Цитата:
|
Re: Проверка попадания в бота.
ABTOMAT, может не прокатить
Function AnimEntityPickMode(aent,mode) EntityPickMode aent,mode,0 For i=1 To CountChildren(aent) AnimEntityPickMode(GetChild(aent,i),mode) Next End Function вот так идеологически правильнее. |
Re: Проверка попадания в бота.
У меня боты идут одним чайлдом, насколько я помню. Я пробовал в EntityPickMode ставить сферу, но тоже не работало. Т.е. мне надо создать поверх ботов сферу, скрыть ее и по ней проверять Pick?
|
Re: Проверка попадания в бота.
ну можно и создать "оболочку"
НО меня напрягли слова Цитата:
Hideentity )) если да то так не прокатит) пиши entityalpha obochka,0 выкинь весь код а то трудно понять , что не таке |
Re: Проверка попадания в бота.
Maxxx.!!!., го курить хелп!
HolyDel, твоя идеологически правильнее, моя - адекватнее. Пример: У скина 40 костей. Нафига каждому ставить пик мод? ИМХО и мешам хватитю... |
Re: Проверка попадания в бота.
Цитата:
ЖжОте Трудно поставить на модель радиус ? EntityPickMode entity,1 EntityRadius entity,x,y |
Re: Проверка попадания в бота.
Про entityalpha я знаю. EntityRadius я пробовал - он ругается, что не может использовать в этой команде типы.
Код пока не выкину, т.к. исходника под рукой сейчас нет. |
Re: Проверка попадания в бота.
Цитата:
![]() Кури хелп все вопросы сами собой исчезнут! |
Re: Проверка попадания в бота.
Цитата:
и я научился юзайть типы по этому тутору !! меня тож раньше в дрож бросало от типов !! но шас я ети типы сую куда попало, везде применяю где только можно !! Так что Maxxx.!!!., разберись в туторе и будет тебе счастье !! ;) |
Re: Проверка попадания в бота.
Не получается
Type TBot Field Ent Field Hp Field EntS End Type For i=1 To 10 bt.TBot=New TBot bt\EntS=CreateSphere (5) bt\ent=LoadAnimMesh ("Enemy/Bot1.b3d",bt\EntS) ScaleEntity bt\ent, 0.7,0.7,0.7 ScaleEntity bt\entS, 0.7,0.7,0.7 bt\hp=100 EntityPickMode bt\entS,1 EntityRadius bt\entS,2,2 PositionEntity bt\entS,Rnd(-25,25),2,Rnd(-25,25) Animate bt\ent,1,0.2 Next Цикл pick=CameraPick(cam,MouseX(),MouseY()) For bt.TBot=Each TBot If MouseHit(2) And pick=bt\entS Then bt\hp=bt\hp-50 If bt\hp<=0 Then FreeEntity bt\entS : FreeEntity bt\ent :Delete bt Next Поставил поверх ботов сферы, и все-равно pick не срабатывает. Иногда срабатывет, когда мышь вообще куда-нибудь в пустоту повернута и когда сто раз на нее нажмешь. Цитата:
|
Re: Проверка попадания в бота.
MHIT2=MouseHit(2)
For bt.TBot=Each TBot If MHIT2 pick=CameraPick(cam,MouseX(),MouseY()) If pick=bt\entS bt\hp=bt\hp-50 endif endif If bt\hp<=0 Then FreeEntity bt\entS : FreeEntity bt\ent :Delete bt Next ВНИМАНИЕ MouseHit(2) - применять в коде один раз !!!!!!!!!! ВСЕ опросы клавиш и мышки делать один раз и сохранять в переменные. |
Re: Проверка попадания в бота.
Цитата:
|
Re: Проверка попадания в бота.
Никто не знает, в чем дело? Я сделал в точности, как тут говорили. А все-равно pick мерзский не срабатывает.
|
Re: Проверка попадания в бота.
весь исходник с ресурсами пакуй в архив и выкладывай
мы не телепаты. у тебя 100 % ошибка алгоритма чудес не бывает |
Re: Проверка попадания в бота.
Вложений: 2
Да я не спорю, что дело в алгоритме. Кстати, когда "стреляешь издалека", то он иногда "попадает" в бота, причем в пик всегда какие-то цифры есть, когда мышь на бота наведена.
Вот исходник. |
Re: Проверка попадания в бота.
Цитата:
поставь:EntityPickMode bt\entS,2 и проверь !! ;) или радиус постав 10000 !! :-) |
Re: Проверка попадания в бота.
Цитата:
|
Re: Проверка попадания в бота.
тебе же написали, нажатие клавиш хранить в переменных. И вообще в твоем коде получается анимация выстрела проигрывается когда жмешь левую кнопку, а стреляешь когда кликнул на правую кнопку.
Код:
global MHIT2 |
Re: Проверка попадания в бота.
H@NON :super: , ты гений. Все заработало. А то я так писал Global MHIT2=MouseHit(2), и ни фига не работало. А сейчас все пашет, но я до сих пор не понимаю, почему не пашет тот вариант, к-й в исходнике. :dontknow:
|
Re: Проверка попадания в бота.
А смысл писать в глобале Global MHIT2=MouseHit(2)? проверка же должна идти в цикле, так у тебя сначало присвоилось переменной значение MouseHit(2), а когда ты уже в цикле прогоняешь ситуацию с нажатием клавиши и он у тебя все время выдает 0, то есть то значение что было присвоено при инициализации графики.
А твой вариант не работал потому что ты часто проверял нажатие мыши( ты сам посмотри сколько у тебя там ботов, вот столько раз ты и проверял, да-да, да еще за один проход главного цикла, а нужно всего проверять один раз на каждой итерации ). |
Re: Проверка попадания в бота.
У меня тоже проблема с сабжем, только другого плана: использование CameraPick дает точную точку попадания в бота, однако при тех же условиях LinePick не возвращает ничего, отобразил на экране линию, чтобы проверить что она на месте, все равно при попадании на линию бот не пикается. Тут неоднократно говорилось, что LinePick глючит, не могли бы вы поделиться при каких условиях это происходит, и как с этим бороться?
|
Re: Проверка попадания в бота.
Цитата:
Просто используй EntityPick(). |
Re: Проверка попадания в бота.
При любых. Никак.
Или математику можешь использовать. (если определить пересечение отрезка со сферой - проблема, то тогда юзай EntityPick(), как сказано выше) |
Re: Проверка попадания в бота.
А если мне необходимо просчитать попадание лазера в меш (НЕ в сферу), тут математикой не обойтись(без просчета положения вертексов), и ЕнтитиПик() помоему не поможет.. И камерапик юзать не могу, вид от третьего лица.. Можно ли это как-то решить?
|
Re: Проверка попадания в бота.
FrankH, да, конечно.
но в 99% случаев можно отделаться сферой. а если у тебя 100 ботов на 5к поликов каждый? тогда игра будет тормозить жутко. выход - сначала проверять на сферу, потом на меш (тормозным pick методом). |
Re: Проверка попадания в бота.
Спасибо, я наконец разобрался КАК работает ЭнтитиПик!(нашел пояснения насчет Z направления), до этого был уверен что берется близжайший обьект вообще, а не по направлению.. Проверил в коде - все работает!:super:
HolyDel, если бы блитц с моими руками такое потянул..:pardon: Представляю космический симулятор с таким кол-вом ботов.. :wallbash::crazy: Поликов пока не более 1к на юнит.. (кстати странно, в максе фейсов почти в два раза меньше чем в блитце трисов:dontknow:) |
Re: Проверка попадания в бота.
FrankH, я где то на форуме выеладывал либу, которая считает, пересекает отрезок сферу или нет. причем считает очень быстро.
|
Часовой пояс GMT +4, время: 05:08. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot