Полицейские шипы -
Delphi - 14.03.2019
Здравствуйте. Хочу сделать, чтобы полицейские шипы пробивали колёса. Использую для этого объект 2899. Думаю сделать область срабатывания, которая будет повторять размер объекта (как коллизия), при вхождении в которую колесо пробьётся. Т.е. получается зная позицию, поворот и размер объекта шипов, получить глобальные координаты xmin, xmax, ymin, ymax, zmin, zmax. Вот с этим преобразованием и прошу помочь. (Размер объекта длина: 4.99, ширина: 1.15, высота: 0.24)
Re: Полицейские шипы -
Mutha_X - 14.03.2019
Тык
А вообще вся тригонометрия считается долго, поэтому лучше будет
Тык_1 и
Тык_2
Re: Полицейские шипы -
Delphi - 14.03.2019
Спасибо. Но я ничего не понял.
Re: Полицейские шипы -
Eims - 16.03.2019
Тебе стоит учитывать то, что координаты авто берутся из центра этого самого авто и, соответственно, если ты сделаешь зону срабатывания такой же, как размер объекта, то работать всё будет криво и через раз.
Полноценная система, копирующая принцип работы шипов из сингла, будет жрать довольно много ресурсов, ибо нужно будет узнавать координаты колёс и смотреть, не попали ли они на шипы. При этом, проверять это нужно будет довольно часто.
В идеале тебе стоит делать несколько проверок координат для каждых шипов.
В первой проверке определять, находится ли игрок в определённом радиусе (например, 20 метров) от каких-либо шипов.
И если находится, то во второй проверке уже проверять, насколько близко он находится и заехал ли он на них (хотя если шипов будет много, то лучше увеличить количество проверок на радиус, дабы свести к минимуму количество шипов, для которых придётся проводить вычисления).
В общем, всё зависит от того, насколько точной должна быть твоя система.
Re: Полицейские шипы -
OKStyle - 16.03.2019
А разве у шипов нет физики? По-моему, у объекта флаг в IDE стоит соответствующий.
Re: Полицейские шипы -
Delphi - 16.03.2019
Quote:
В идеале тебе стоит делать несколько проверок координат для каждых шипов.
В первой проверке определять, находится ли игрок в определённом радиусе (например, 20 метров) от каких-либо шипов.
И если находится, то во второй проверке уже проверять, насколько близко он находится и заехал ли он на них (хотя если шипов будет много, то лучше увеличить количество проверок на радиус, дабы свести к минимуму количество шипов, для которых придётся проводить вычисления).
|
Да, так и планировал. Думал задействовать Streamer Dynamic Area для первичного определения игрока авто. Если Dymanic Area сработал, и разные проверки выполнены, то игроку ставится переменная на 1, и в OnPlayerUpdate включается точное определение по колёсам.
Quote:
у объекта флаг в IDE стоит соответствующий
|
Можно подробней? И как это можно использовать?
Re: Полицейские шипы -
eakwarp - 16.03.2019
Quote:
Originally Posted by OKStyle
А разве у шипов нет физики? По-моему, у объекта флаг в IDE стоит соответствующий.
|
Нет.
Я делал радиусами, установленные шипы, поиск машины в ближнем радиусе, если есть, обсчет переда и зада авто, в момент пересечения шипов. Естественно все это работает плюс минус километр.
Re: Полицейские шипы -
Eims - 17.03.2019
Quote:
Originally Posted by Delphi
Да, так и планировал. Думал задействовать Streamer Dynamic Area для первичного определения игрока авто. Если Dymanic Area сработал, и разные проверки выполнены, то игроку ставится переменная на 1, и в OnPlayerUpdate включается точное определение по колёсам.
|
Вообще всё зависит от того, какое максимальное количество шипов ты планируешь разрешить.
Если шипов будет мало - можно заюзать и динамические зоны. Но я бы лучше просто запускал индивидуальный таймер, когда игрок запускает двигатель в авто, и уже в таймере делал бы все нужные проверки.
И если шипов может быть много, я бы сделал так:
1) Разделил карту на определённое количество квадратов, постаравшись заранее предугадать где чаще всего игроки будут ставить шипы. В зонах, где шипы будут ставить чаще (какое-нибудь гетто, например), квадратов было бы больше, дабы каждый квадрат в себе содержал минимальное количество зон.
2) Создал бы массив под каждый из квадратов для хранения ID шипов, чтоб в дальнейшем работать напрямую с шипами из текущего квадрата, а не обрабатывать все шипы.
3) При создании шипов определял бы квадрат, в котором они находятся, и записал бы ID зоны в соответствующий массив.
4) Отслеживал бы то, в каком квадрате находится игрок и уже работал с координатами тех шипов, которые находятся в этом квадрате.
+ для точности можно так же на каждые шипы вешать какой-то радиус, при котором бы запускался таймер с минимальным интервалом. И уже в таймере массивом передавать ID шипов для сверки координат, чтоб по новой не определять их.
Это + индивидуальный таймер, который работает только когда игрок движется в авто - всё это позволит свести к минимуму лишние проверки.
Хотя, опять же, если ты будешь делать вменяемое ограничение на количество шипов, то можно обойтись и без разграничения карты на квадраты (ну или написать более универсальную систему, начав использовать эти разграничения не только для шипов, но и для всех остальных случаев, когда нужно сверять координаты).
Re: Полицейские шипы -
White_116 - 18.03.2019
Quote:
Originally Posted by Eims
Вообще всё зависит от того, какое максимальное количество шипов ты планируешь разрешить.
Если шипов будет мало - можно заюзать и динамические зоны. Но я бы лучше просто запускал индивидуальный таймер, когда игрок запускает двигатель в авто, и уже в таймере делал бы все нужные проверки.
И если шипов может быть много, я бы сделал так:
1) Разделил карту на определённое количество квадратов, постаравшись заранее предугадать где чаще всего игроки будут ставить шипы. В зонах, где шипы будут ставить чаще (какое-нибудь гетто, например), квадратов было бы больше, дабы каждый квадрат в себе содержал минимальное количество зон.
2) Создал бы массив под каждый из квадратов для хранения ID шипов, чтоб в дальнейшем работать напрямую с шипами из текущего квадрата, а не обрабатывать все шипы.
3) При создании шипов определял бы квадрат, в котором они находятся, и записал бы ID зоны в соответствующий массив.
4) Отслеживал бы то, в каком квадрате находится игрок и уже работал с координатами тех шипов, которые находятся в этом квадрате.
+ для точности можно так же на каждые шипы вешать какой-то радиус, при котором бы запускался таймер с минимальным интервалом. И уже в таймере массивом передавать ID шипов для сверки координат, чтоб по новой не определять их.
Это + индивидуальный таймер, который работает только когда игрок движется в авто - всё это позволит свести к минимуму лишние проверки.
Хотя, опять же, если ты будешь делать вменяемое ограничение на количество шипов, то можно обойтись и без разграничения карты на квадраты (ну или написать более универсальную систему, начав использовать эти разграничения не только для шипов, но и для всех остальных случаев, когда нужно сверять координаты).
|
Описал работу стримера.
Лучше делать проверку на пересечения вектора движения авто (можно разделить все 4 колеса) с линией шипов.
Даже если задержка проверки в таймере будет большой, то пересечение вектора даст 100% результат в отличии от проверки на нахождение в зоне, где можно тупо пролететь.
Можешь модифицировать под проверку пересечения векторов
W_Points
Re: Полицейские шипы -
Eims - 19.03.2019
Quote:
Originally Posted by White_116
Описал работу стримера.
|
Только в стримере мы не можем контролировать расположение этих зон/размер и т.п. Я же говорю о более тонкой и детальной настройке, что уменьшит нагрузку при больших объёмах данных.