forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Вопрос про наболевшее - коллизии. (http://forum.boolean.name/showthread.php?t=5702)

Crystal 08.02.2008 17:03

Ответ: Вопрос про наболевшее - коллизии.
 
Ну это пули юзера.
А пули ботов ограничены по времени.
(но я думаю перевести это дело на расстояние, не нравится мне эта куйня с временем)

Добавил:
Пересмотрел. Шо это за фигню ты написал? Конечно не проще.
У меня в конце прописано удалять пулю если o\delet=1
Это бывает в 2 случаях: 1. если пуля улетела далеко от юзера. 2 если пуля подлетела близко к боту.
А у тебя получается что пуля должна удаляться только тогда когда подлетит к боту.
Ты мне код не проще сделал, а наоборот усложнил, придётся отдельно дописывать удаление при дистанции от юзера. Тобиш пулю удалять надо в двух разных случаях, а не только когда o\delet равен одному.

HolyDel 08.02.2008 17:06

Ответ: Вопрос про наболевшее - коллизии.
 
впринципе да. exit-ом можно решить. но он вроде выведет тока за один цикл. а надо за оба.

moka 08.02.2008 17:10

Ответ: Вопрос про наболевшее - коллизии.
 
Тогда ставим ещё одно условие, на проверку наличия объектов, если отсутствуют - лепим Exit.

tormoz 08.02.2008 17:18

Ответ: Вопрос про наболевшее - коллизии.
 
Не нужно сравнивать дистанцию - в этом случае не целесообразно (придется перебирать цикл в цикле, или пули в танках, либо танки в пулях)
Обычная тупая коллизия прекрасно сработает. И можно решить практически любую задачу особо не напрягаясь
На пули нужно делать так:

счетчик времени :
о\тайм=о\тайм+1
ент=ЕнтитуКоллидед(о\ент,тип_бот)
ент2=ЕнтитуКоллидед(о\ент,тип_уровень)
Иф ент ор ент2
о\тайм=401
ендиф


Иф о\тайм=>400
Иф о\тайм=401
БольшойБум(о\ент)
ЕндИф
ФрееЕнтити о\ент
Делете о
ЕндИф

HolyDel 08.02.2008 17:23

Ответ: Вопрос про наболевшее - коллизии.
 
Цитата:

Тогда ставим ещё одно условие, на проверку наличия объектов, если отсутствуют - лепим Exit.
вот. это работать будет.
теперь смотри - мы просто вводим поле обозначающее удаленность объекта, и проводим всякие проверки, потом, в самом конце, если удален стоит метка то удаляем ентити и объект. зато так можно "удалять" пульку в любом месте, ошибки не будт.

jimon 08.02.2008 17:54

Ответ: Вопрос про наболевшее - коллизии.
 
tormoz
Цитата:

или пули в танках, либо танки в пулях

ой что-то меня ето расмешило :lol:


HolyDel
упс, не заметил :)

Blitzerg
чувак, представь что ты строчку o\delet = 1 замениш на удаление пули
кода меньше ! ... в любом случае ты делаешь ДВЕ проверки
и еще одну проверку o\delet = 1 .. в итоге три проверки ...
а так будет две .. где сложности ? не вижу ...

Crystal 08.02.2008 18:27

Ответ: Вопрос про наболевшее - коллизии.
 
А если у меня 20 разных видов ботов, ещё земля, ещё дома, ещё предметы.
Чё мне каждый раз писать:

Код:

if событие then
FreeEntity o\pulka
Delete o 
end if

????????

Не проще ли мне писать if событие then o\delet=1 ??

Не кажется ли тебе, что я туеву хучу строк экономить буду?

moka 08.02.2008 18:38

Ответ: Вопрос про наболевшее - коллизии.
 
Blitzerg, О! Я кстать недавно об этом задумался, и понял, экономия строк, порой - плохо. Смотри, у тебя будет лишнея переменная, :) А условие, всёравно выполнится ;)

HolyDel 08.02.2008 18:47

Ответ: Вопрос про наболевшее - коллизии.
 
уууу!!!
Код:

if entitydistance(o\pulka,vrag1) then
FreeEntity o\pulka
Delete o 
end if

if entitydistance(o\pulka,vrag2) then ;вопрос на засыпку. что будет здесь, если выполнится предыдущие условие?
FreeEntity o\pulka
Delete o 
end if


Crystal 08.02.2008 19:07

Ответ: Вопрос про наболевшее - коллизии.
 
Ошипко!
Пулё не найдено, идите накуй.
Думаю такое будет?

HolyDel 08.02.2008 19:13

Ответ: Вопрос про наболевшее - коллизии.
 
угу. такое и будет. именно поэтому (а не из за экономии строчек, или экономии памяти) надо завести свою перменную с состоянием "удаленности"

при нынешних 2Гб памяти, потратить жалких 4 байта на пулю - ну это совсем ничего.

Crystal 08.02.2008 19:14

Ответ: Вопрос про наболевшее - коллизии.
 
Ну да. Так и есть )
Собсно по этому она там и поставлена.
Про экономию я сморозил.
Просто изложил в теории еслиб предложение джимона работало то это было бы не экономно )

Taugeshtu 08.02.2008 19:33

Ответ: Вопрос про наболевшее - коллизии.
 
перебор в данном случае не рулит. Рулит парабола-триггер как mesh, скалящийся в зависимости от угла выстрела (если уж совсем реализм и пули летают по навесной) или же бокс-цилиндр-извращенно_скаленный_шарик с проверкой на коллизию. Особенно в данном случае рулит сторонний физ. двиг.

по поводу реально летящих в данном случае пуль (особенно медленнолетящих) - мы знаем, что пуля летит всю свою траекторию за 700 с буем мс. А дальше проверяем коллизию триггера, если бот словил ее, то проверка на то, сколько процентов траектории (ее максимальная длина также изначально определена) пульк0 пролетела, и если бот стоит примерно ("допуск" обязателен - мс не будут топать точно по n штук после каждой команды!) на этом промежутке - хит по нему, через обжект ессно, удаляем бота и после ставим флажок удаления пульке.

jimon 08.02.2008 20:42

Ответ: Вопрос про наболевшее - коллизии.
 
HolyDel
мне это сводить к знаниям не_программиста или ты издеваешся ?
есно что если я напишу какой-то бред который даже логически
не пашет то и в компиляторе он не запашет

Crystal 08.02.2008 21:19

Ответ: Вопрос про наболевшее - коллизии.
 
Какой бред?
Твой вариант кода не предпологает, что пулю надо будет удалять
в множестве различных событий.
Так как если пуля будет удалена при определённом событии, и после этого
будет другая проверка пули а пули то уже нет, то будет ошибка кода,
и игра вылетит.
Холи это какрас и продемонстрировал своим вопросом.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot