Понедельник, 25.11.2024, 18:10Привет Гость
ArmA-2 Моды, миссии, кампании, аддоны, скрипты, редактор

Главная | Файлы | FAQ | Платформа | О сайте | Контакты | Зарегистрироваться | Войти
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 1 из 1
  • 1
Краткое руководство по команде setvelocity и setdir.
PIONEERДата: Воскресенье, 15.11.2009, 18:49 | Сообщение # 1
Лейтенант
Сообщений: 589
Репутация: 16
Статус: Offline
Краткое руководство по команде setvelocity и setdir.

_obj - это будет танк

// обязательно отнимаем топливо, чтобы команда setdir работала корректно. В противном случае танк будет все время поворачивать обратно, чтобы вернуться в свое первоначальное положение (т.е. встать под исходным углом так как был поставлен на карту)
_obj setfuel 0

_angle = угол поворота. Можно задавать как положительное, так и отрицательное число

задаем скорость движения и радиус поворота
_x=5
_y=5
_х2=1
_у2=1
_i=0 - параметр для задания длительности движения в заданном направлении

//переменная _j нужна для того, чтоб сделать скрипт универсальным для поворота налево и направо

? (_angle<0): _j=-1
? (_angle>0): _j=1
? (_angle==0): _j=0

Чтобы юнит поехал прямо (т.е. в том направлении, в котором он смотрит)

#start1
_obj setvelocity [_x*sin(getdir _obj),_y*cos(getdir _obj),0] // данная команда будет корректно двигать танк вперед независимо от того, под каким углом он поставлен на карте.
_i=_i+1
_i>=2900): goto "next" // продолжительность - 2900 циклов - число подбирается опытным путем
goto "start1"

теперь повернем

#next
_i=0 // теперь _i поможет нам отследить угол поворота и определить скорость поворота. Обнулим его.

_initdir=getdir _obj // определим исходный угол поворота танка

~1
для поворота нам надо не только двигать танк вперед, но и менять его угол командой setdir
#start2
_obj setvelocity [_x2*sin(getdir _obj),_y2*cos(getdir _obj),0]
_obj setdir (_initdir-_i*_j)
_i=_i+0.1 // 0.1 - это приращение угла поворота. Чем больше это число, тем быстрее повернет танк

_i>=abs(_angle)): goto "next2" // прекратим поворот как только _i станет по модулю больше, чем угол поворота. Модуль нужен, чтоб отслеживать повороты как налево, так и направо.
goto "start2"

#next2

Далее аналогично можно задать любые перемещения. Не забудьте обнулять _i и обновлять параметр _initdir

Существует еще команда setformdir.
unit setformdir 240
Она заставляет юнит повернуть на заданный угол ПО ЧАСОВОЙ СТРЕЛКЕ. Она корректно работает на заправленной технике.




Хотите больше новостей? Подписывайтесь на мою рассылку
 
rustikДата: Вторник, 01.06.2010, 18:57 | Сообщение # 2
Рядовой
Сообщений: 3
Репутация: 0
Статус: Offline
_obj= _this select 0
_man = nearestObjects [ _obj , ["player","Man"], 200] select 1
_pos=getpos _obj;
_pos2=getpos _man;
_angle=(((_pos2 select 0) - (_pos select 0)) atan2 ((_pos2 select 1)-(_pos select 1)));
_obj setdir _angle;

_x=5
_y=5
_х2=1
_у2=1
_i=0

? (_angle<(((_pos2 select 0) - (_pos select 0)) atan2 ((_pos2 select 1)-(_pos select 1)))): _j=-1
? (_angle>(((_pos2 select 0) - (_pos select 0)) atan2 ((_pos2 select 1)-(_pos select 1)))): _j=1
? (_angle==(((_pos2 select 0) - (_pos select 0)) atan2 ((_pos2 select 1)-(_pos select 1)))): _j=0

#start1
_obj setvelocity [_x*sin(getdir _obj),_y*cos(getdir _obj),0]
_i=_i+1
_i>=0): goto "next"
goto "start1"

#next
_i=0

_initdir=getdir _obj

~1

#start2
_obj setvelocity [_x2*sin(getdir _obj),_y2*cos(getdir _obj),0]
_obj setdir (_initdir-_i*_j)
_i=_i+0.5

_i>=abs(_angle)): goto "next"

goto "start1"
Где неправильно-не подскажете?

 
PIONEERДата: Вторник, 01.06.2010, 21:31 | Сообщение # 3
Лейтенант
Сообщений: 589
Репутация: 16
Статус: Offline
rustik, а запускать в арма не побывал? Самый эффективный метот, запустить и посмотреть че не так.
Да и зачем тебе? Какую задачу данный скрипт должен выполнить?




Хотите больше новостей? Подписывайтесь на мою рассылку
 
rustikДата: Вторник, 01.06.2010, 23:03 | Сообщение # 4
Рядовой
Сообщений: 3
Репутация: 0
Статус: Offline
пробовал-едет упрямо вперед-а должен был при появлении в радиусе 200 метров от него мена ехать к нему-примерно вот так

скрипт исправил slon-теперь все работает-это я сам ступил
у меня вопрос щас другого плана-как можно двигать геймложик или другой неодушевленный предмет типа невидимой вертплощадки-которые в силу своего предназначения не могут физически передвигаться-но ведь у меня танк без механика по скрипту двигается вполне самостоятельно-спрашиваю потому што не могу сдвинуть дропп-мне надо штоб он перемещался


Сообщение отредактировал rustik - Вторник, 01.06.2010, 23:12


 
PIONEERДата: Среда, 02.06.2010, 13:26 | Сообщение # 5
Лейтенант
Сообщений: 589
Репутация: 16
Статус: Offline
Quote (rustik)
у меня вопрос щас другого плана-как можно двигать геймложик или другой неодушевленный предмет типа невидимой вертплощадки-которые в силу своего предназначения не могут физически передвигаться-но ведь у меня танк без механика по скрипту двигается вполне самостоятельно-спрашиваю потому што не могу сдвинуть дропп-мне надо штоб он перемещался

довольно интерсно в плане для чего это)

Если хочешь передвинуть - можно просто телепортнуть
name setpos getmarkerpos "marker"

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

gomarker.sqs
track.sqf

Из платформы

 
rustikДата: Среда, 02.06.2010, 18:24 | Сообщение # 6
Рядовой
Сообщений: 3
Репутация: 0
Статус: Offline
Quote (PIONEER)
довольно интерсно в плане для чего это)

я дроппы к по привычке к геймложикам или вертплощадкам при создании привязываю-в том числе и свет и огонь и т.п.
так вот эти невидимые обьекты у меня не перемещаются а если привяжу к технике или обьектам то перемещаются-заметил што если разместить обьект в воздухе посредством записи в ините-this setpos [getpos this select 0, getpos this select 1, (getpos this select 2) + 10]-и если он падает то значит сетвелосити действует а если не падает то не будет действовать.
Quote (PIONEER)
Если хочешь передвинуть - можно просто телепортнуть

штоб имитировать движение мне приходится сетпосить каждый раз обьект на полметра вперед относительно своих же координат-_pos1 = [(_pos select 0) + sin 40 * 0.5,(_pos select 1) + cos 40 * 0.5]-здесь я ему еще и угол задаю штоб по кругу двигались-где _pos=getpos обьекта,а _pos1 это новые координаты куда и сетпосю-тока у меня не циклично выходит или ваще пропадает или после 3 телепортов стоит на месте-короче это для меня сложно-вот и спрашиваю как можно попроще передвинуть-можно еще сетвекторупить и сетвектордирить их но это не совсем то-при этом они просто углом встают и все-к тому же при телепортации в условии нада задать и сетдир и гетдир а вертплощадка круглая она не может ко мне повернуться передом.материальные предметы не могу использовать так как они сквозь стены не входят а мне надо штоб дропп двигался не на што не обращая внимание-вообщем то затупил я конкретно-помогите
 
SlonДата: Воскресенье, 06.03.2011, 17:40 | Сообщение # 7
Рядовой
Сообщений: 4
Репутация: 0
Статус: Offline
Функция для задания поворота и наклона объекту.

Code
_dir = 60;//угол в горизонтальной плоскости
_ang = 0;//угол в продольной плоскости
_pit = 30;//угол в поперечной плоскости

_dx = sin _dir * cos _ang;
_dy = cos _dir * cos _ang;
_dz = sin _ang;

_ux = _dy * sin _pit;
_uy = _dx * sin _pit;
_uz = cos _ang * cos _pit;

_OBJ setVectorDirAndUp [[_dx,_dy,_dz],[_ux,_uy,_uz]];
 
T-72bДата: Воскресенье, 08.04.2012, 17:40 | Сообщение # 8
Рядовой
Сообщений: 1
Репутация: 0
Статус: Offline
Мне нужно осуществить поворот. На определённый угол, солдата управляемого ИИ. У солдата disableAI "MOVE; setformdir слишком капризная команда, так как если солдат поворачивается хотя бы на один градус не так, как надо, командой задаётся в последствии совсем другой поворот градуса.
Вот пример скрипта, который я делал с setformdir.


т.к. команда setdir определяет поворот только по строго закреплённым крадусам *т.е. если солдат будет стоять на 85гр, а ты сет диром задашь 290, то по азимутут солдат повернётся именно на 290, а не на 290+85*. Мне просто нужно создать скрипт, который плавно бы поворачивал бойца командой setdir, т.е. множество
setdir 90.01;
sleep 0.1;
setdir 90.02;
sleep 0.1;
и т.д. заменить на систему вычисления угла.
Эти строки мне ничего не дали. Я просто их не могу понять.
_obj setdir (_initdir-_i*_j)
_i=_i+0.1 // 0.1
Помогите чем сможете.
Как я понял, мне просто нужны циклы, циклы, которые заменят много строк, просчитают определённый угол и цикл завершится.
Как нужный угол задать я также не знаю.
 
  • Страница 1 из 1
  • 1
Поиск:





Copyright web-pioneer.at.ua © 2011 | Используются технологии uCoz
Админ: PIONEER | web-pioneer@yandex.ru | Любое или частичное копирования материала с веб-сайта web-pioneer.at.ua запрещено! А то прокляну.