Полицейские шипы
#1

Здравствуйте. Хочу сделать, чтобы полицейские шипы пробивали колёса. Использую для этого объект 2899. Думаю сделать область срабатывания, которая будет повторять размер объекта (как коллизия), при вхождении в которую колесо пробьётся. Т.е. получается зная позицию, поворот и размер объекта шипов, получить глобальные координаты xmin, xmax, ymin, ymax, zmin, zmax. Вот с этим преобразованием и прошу помочь. (Размер объекта длина: 4.99, ширина: 1.15, высота: 0.24)
Reply
#2

Тык
А вообще вся тригонометрия считается долго, поэтому лучше будет
Тык_1 и Тык_2
Reply
#3

Спасибо. Но я ничего не понял.
Reply
#4

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

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

В идеале тебе стоит делать несколько проверок координат для каждых шипов.
В первой проверке определять, находится ли игрок в определённом радиусе (например, 20 метров) от каких-либо шипов.
И если находится, то во второй проверке уже проверять, насколько близко он находится и заехал ли он на них (хотя если шипов будет много, то лучше увеличить количество проверок на радиус, дабы свести к минимуму количество шипов, для которых придётся проводить вычисления).
В общем, всё зависит от того, насколько точной должна быть твоя система.
Reply
#5

А разве у шипов нет физики? По-моему, у объекта флаг в IDE стоит соответствующий.
Reply
#6

Quote:

В идеале тебе стоит делать несколько проверок координат для каждых шипов.
В первой проверке определять, находится ли игрок в определённом радиусе (например, 20 метров) от каких-либо шипов.
И если находится, то во второй проверке уже проверять, насколько близко он находится и заехал ли он на них (хотя если шипов будет много, то лучше увеличить количество проверок на радиус, дабы свести к минимуму количество шипов, для которых придётся проводить вычисления).

Да, так и планировал. Думал задействовать Streamer Dynamic Area для первичного определения игрока авто. Если Dymanic Area сработал, и разные проверки выполнены, то игроку ставится переменная на 1, и в OnPlayerUpdate включается точное определение по колёсам.

Quote:

у объекта флаг в IDE стоит соответствующий

Можно подробней? И как это можно использовать?
Reply
#7

Quote:
Originally Posted by OKStyle
View Post
А разве у шипов нет физики? По-моему, у объекта флаг в IDE стоит соответствующий.
Нет.

Я делал радиусами, установленные шипы, поиск машины в ближнем радиусе, если есть, обсчет переда и зада авто, в момент пересечения шипов. Естественно все это работает плюс минус километр.
Reply
#8

Quote:
Originally Posted by Delphi
View Post
Да, так и планировал. Думал задействовать Streamer Dynamic Area для первичного определения игрока авто. Если Dymanic Area сработал, и разные проверки выполнены, то игроку ставится переменная на 1, и в OnPlayerUpdate включается точное определение по колёсам.
Вообще всё зависит от того, какое максимальное количество шипов ты планируешь разрешить.
Если шипов будет мало - можно заюзать и динамические зоны. Но я бы лучше просто запускал индивидуальный таймер, когда игрок запускает двигатель в авто, и уже в таймере делал бы все нужные проверки.


И если шипов может быть много, я бы сделал так:
1) Разделил карту на определённое количество квадратов, постаравшись заранее предугадать где чаще всего игроки будут ставить шипы. В зонах, где шипы будут ставить чаще (какое-нибудь гетто, например), квадратов было бы больше, дабы каждый квадрат в себе содержал минимальное количество зон.
2) Создал бы массив под каждый из квадратов для хранения ID шипов, чтоб в дальнейшем работать напрямую с шипами из текущего квадрата, а не обрабатывать все шипы.
3) При создании шипов определял бы квадрат, в котором они находятся, и записал бы ID зоны в соответствующий массив.
4) Отслеживал бы то, в каком квадрате находится игрок и уже работал с координатами тех шипов, которые находятся в этом квадрате.
+ для точности можно так же на каждые шипы вешать какой-то радиус, при котором бы запускался таймер с минимальным интервалом. И уже в таймере массивом передавать ID шипов для сверки координат, чтоб по новой не определять их.

Это + индивидуальный таймер, который работает только когда игрок движется в авто - всё это позволит свести к минимуму лишние проверки.
Хотя, опять же, если ты будешь делать вменяемое ограничение на количество шипов, то можно обойтись и без разграничения карты на квадраты (ну или написать более универсальную систему, начав использовать эти разграничения не только для шипов, но и для всех остальных случаев, когда нужно сверять координаты).
Reply
#9

Quote:
Originally Posted by Eims
View Post
Вообще всё зависит от того, какое максимальное количество шипов ты планируешь разрешить.
Если шипов будет мало - можно заюзать и динамические зоны. Но я бы лучше просто запускал индивидуальный таймер, когда игрок запускает двигатель в авто, и уже в таймере делал бы все нужные проверки.


И если шипов может быть много, я бы сделал так:
1) Разделил карту на определённое количество квадратов, постаравшись заранее предугадать где чаще всего игроки будут ставить шипы. В зонах, где шипы будут ставить чаще (какое-нибудь гетто, например), квадратов было бы больше, дабы каждый квадрат в себе содержал минимальное количество зон.
2) Создал бы массив под каждый из квадратов для хранения ID шипов, чтоб в дальнейшем работать напрямую с шипами из текущего квадрата, а не обрабатывать все шипы.
3) При создании шипов определял бы квадрат, в котором они находятся, и записал бы ID зоны в соответствующий массив.
4) Отслеживал бы то, в каком квадрате находится игрок и уже работал с координатами тех шипов, которые находятся в этом квадрате.
+ для точности можно так же на каждые шипы вешать какой-то радиус, при котором бы запускался таймер с минимальным интервалом. И уже в таймере массивом передавать ID шипов для сверки координат, чтоб по новой не определять их.

Это + индивидуальный таймер, который работает только когда игрок движется в авто - всё это позволит свести к минимуму лишние проверки.
Хотя, опять же, если ты будешь делать вменяемое ограничение на количество шипов, то можно обойтись и без разграничения карты на квадраты (ну или написать более универсальную систему, начав использовать эти разграничения не только для шипов, но и для всех остальных случаев, когда нужно сверять координаты).
Описал работу стримера.

Лучше делать проверку на пересечения вектора движения авто (можно разделить все 4 колеса) с линией шипов.

Даже если задержка проверки в таймере будет большой, то пересечение вектора даст 100% результат в отличии от проверки на нахождение в зоне, где можно тупо пролететь.

Можешь модифицировать под проверку пересечения векторов W_Points
Reply
#10

Quote:
Originally Posted by White_116
View Post
Описал работу стримера.
Только в стримере мы не можем контролировать расположение этих зон/размер и т.п. Я же говорю о более тонкой и детальной настройке, что уменьшит нагрузку при больших объёмах данных.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)