You are not logged in.
Pages: 1
я тут хочу такой скрипт сделать, типа подъехал ГГ на тачке к стоящему Андрому нажал кнопку "ДА" и тачка прилепилась к нему, и на нём можно будет перевезти тачку куда надо, потом сесть в тачку нажать "НЕТ" и уехать.
вообщем получилось, но только 1 проблема, тачка прилепает в самый центр самолёта, так вот как мне сделать чтоб тачку не переносила в центр, а она оставалась на том месте, где я нажал на кнопку
:AH124 wait 2000 thread 'NRG' Model.Load(#ANDROM) :AH124_1 wait 0 if AND Model.Available(#ANDROM) jf @AH124 1@ = Car.Create(#ANDROM, 1417.2065, 1621.3806, 19.1275) :AH124_2 wait 0 if and 00DF: actor $PLAYER_ACTOR driving not Actor.InCar($PLAYER_ACTOR, 1@) jf @AH124_2 03C0: 2@ = actor $PLAYER_ACTOR car if and 00E1: key_pressed 0 11 0204: actor $PLAYER_ACTOR near_car_in_car 1@ radius 50.0 50.0 unknown 0 jf @AH124_2 0683: attach_car 2@ to_car 1@ at_offset 3.0 0.0 0.0 rotation 0.0 0.0 0.0 02D4: unknown_turn_off_car 2@ engine if 00E1: key_pressed 0 10 jf @AH124_2 0684: detach_car 2@ 3.0 0.0 0.0 collision_detection 0 jump @AH124_2
Offline
0683: attach_car 2@ to_car 1@ at_offset 3.0 0.0 0.0 rotation 0.0 0.0 0.0
Попробуй поменять оффсет, видимо они отсчитываются от центра самолета.
Offline
подобный вопрос, хочу прилепить тачку к пакеру
0683: attach_car @ to_car@ with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0
опкод справляеться хорошо, вот только не понятен механизм оффсетов.
по z спокойно подходит разница между координатами z пакера и автомобиля.
а вот по х и y ваще какая-то фигня.
offset по х - тачка находиться на пакере только в случае если он 0. в других случаях висит в воздухе, странный оффсет.
по у разница у-ковых координат работает только на первых местах пакера, ближе к хвосту начитаеться хрень...
подскажите плиз где про эти координаты и офсеты вообще почитать можно.
Offline
0683: attach_car 1@ to_car 0@ with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0
Оффсеты (смещения) отсчитываются от опорной точки машины 0@ в системе координат, связанной с этой машиной, а не в мировой системе координат. В общем случае эти оффсеты не совпадают с разницей мировых координат машин (для равенства необходимо учесть углы поворота относительно мировых осей). Если все углы поворота машины относительно мировых осей равны нулю, то направления мировых осей совпадают с направлениями собственных осей машины. Отсюда становится ясно, что в 0683 (и других подобных опкодах) X оффсет отсчитывается по боковому направлению от центра машины (>0 - вправо, <0 - влево), Y оффсет отсчитывается по продольному направлению (>0 вперед, <0 назад), с Z всё понятно - отсчитывается вверх (или вниз, если <0). Углы поворота отсчитываются также относительно осей машины.
Last edited by Den_spb (18-01-2010 21:50)
Offline
Благодарю за разьяснения, действительно то что оффсеты относительно пакера считаються нужно было догадаться сразу после того как с глобальными координатами ниче не получилось
вобщем начал пробовать прикреплять, к сожалению самое правильное расстояние получаеться банальной теоремой пифагора. к сожалению потому что расстояние беззнаковое, и не прокатит за оффсет
а у меня чето мозк не работает уже сеня
0407: store_coords_to 7@ 8@ 9@ from_car 5@ with_offset 0.0 0.0 0.0 0407: store_coords_to 10@ 11@ 12@ from_car 6@ with_offset 0.0 0.0 0.0 0063: 9@ -= 12@ // (float) //- z difference 077D: 14@ = car 5@ x_angle //0087: 22@ = 10@ // (float) 0063: 10@ -= 7@ // (float) //- x difference 0063: 11@ -= 8@ // (float) //- y difference 0087: 23@ = 10@ // (float) 006B: 10@ *= 23@ // (float) x2 // почему-то работало только так 0087: 24@ = 11@ // (float) 006B: 11@ *= 24@ // (float) y2 005B: 10@ += 11@ // (float) //x2+y2 01FB: 25@ = square_root 10@ // - идеальное расстояние, но не известен знак ... тут нужно как-то выкупить знак ... 0683: attach_car 5@ to_car 6@ with_offset 0.0 25@ 9@ rotation 14@ 0.0 0.0
потом я уже нашел в хелпе коды для квадратов sqr($var) и все такое, но не стал менять рабочее
вспомнилось что нужно только перенести и повернуть и получить нахаляву новые координаты, а учитывая что по х всегда 0, потому как крепим пока не как поставили, а на линии на пакере, то вообще получаеться одно уравнение
и родился вророй вариант
0063: 9@ -= 12@ // (float) //- z difference 077D: 14@ = car 5@ x_angle 0174: 10@ = car 6@ Z_angle 02F7: 13@ = sine 10@ // (float) 0063: 8@ -= 11@ // (float) //y - y0 0073: 8@ /= 13@ // (float) y-y0/sin() wait 500 0683: attach_car 5@ to_car 6@ with_offset 0.0 8@ 9@ rotation 14@ 0.0 0.0 // 2nd bottom place wait 500
во втором варианте получаеться отличный оффсет, сразу со знаком и всем. Но на практике в некоторых местах на втором этаже пакера присудсвует некоторая погрешность и выглядит некрасиво немножко.
Так что приходиться пока считать 1м вариантом число, а из второго брать знак оффсета, рачно короче. Если кто поможет тыкнуть в готовую реализацию подобного аттачмента, либо помочь советом милости просим. Погрешность там действительно не совсем значительная, но пифагор ваще идеально ставит.
У меня угол ротейшена береться x_angle с текущей машины подозревая что она станет где нажали кнопку, а если сдвигаеться немного то колеса какбы немного утопшие в пакере.
ну и понятно что пока задом заезжать на пакер я не рискую, угол атача еще не высчитывал
кстати координаты это кул, но заметил еще один потенциальный деффект, если прижать пакер немного грузом, то координаты по z тоже не совсем правильно считаються. Видимо уровень сжатия подвески тоже нужно учитывать в идеальном варианте
Смотрел в структуры, suspension height может или level to the ground хз, тут тоже нуждаюсь в подсказках
Last edited by doxtop (22-01-2010 00:39)
Offline
вобщем начал пробовать прикреплять, к сожалению самое правильное расстояние получаеться банальной теоремой пифагора. к сожалению потому что расстояние беззнаковое, и не прокатит за оффсет
Тут вообще-то матрица преобразования координат нужна.
Offline
Тут вообще-то матрица преобразования координат нужна.
А как в скриптах реализована работа с матрицами? насколько я понимаю что никак,
все равно раскладывать по уравнениям
x = x1*cos A + y1*sinA + x0
y = x1*sin A + y1*cosA + y0
учитывая что в новых координатах x1 =0
x = y1*sinA + x0
y = y1*cosA + y0y1 = y-y0/cosA
- что и написано выше с учетом того что 02F7: 13@ = sine 10@ // (float) это косинус
я просто изначально подумао грешным делом обойтись двухмерными преобразованиями, а за растояние по Z взять разницу координат по Z.
к сожалению ничего не получилось, после долгого катания на пакере в разных местах, особенно в сельской местности в горах, рухнули надежды не только на разницу по Z но и на угол поворота x_angle машины в качестве ротейшена
придеться таки сделать полный перенос по всем понятиям и узнать все координаты
а вот с углами rotation в
0683: attach_car 5@ to_car 6@ with_offset 0.0 25@ 9@ rotation 14@ 0.0 0.0
не все так просто, по сути канечно можно по Z проигнорировать и оставить 0, чтобы машина прилипала правильно без перегибов, это если оставлять возможность прикреплять тачку только правильно заехав на пакер.
по Y нужно чтобы определить задом заехал или передом, думаю можно четко весь угол не знать, а просто 180 либо 0.
ну и по Х это полюбому нужно, но банальный угол наклона машины не пройдет когда пакер тоже наклонен вниз
вот думаю хватит ли мне разниц углов пакера и машины или тоже мудрить в сторону преобразования координат в сферических системах...
Last edited by doxtop (25-01-2010 11:16)
Offline
по Y нужно чтобы определить задом заехал или передом, думаю можно четко весь угол не знать, а просто 180 либо 0.
При Y угле, равном 0, машина будет стоять на колёсах, а при 180 - будет перевёрнута вверх дном. А вокруг вертикальной оси отсчитывается угол Z.
Offline
Pages: 1