Перейти к содержанию

Kap

Пилоты
  • Публикаций

    54
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные Kap

  1.  А я и не говорю про всех милиционеров- пенсионеров, я говорю про конкретного м.-п. и никоим образом не хотел как то обидеть всех остальных, Если кого то обидел, то приношу свои извинения.

    Про разных людей согласен, даже более того, тому кто стреляет и пилотирует хорошо, зачастую не разбираясь в теории, и не надо туда лезть, а то могут уподобиться сороконожке, которую спросили как она выбирает какую ногу переставить, та задумалась, и после этого не смогла ходить. Хотя как говориться "Теория без практики мертва, а практика без теории, глупа". 

    Что первично, а что вторично для точной стрельбы и пилотажа нужно структурировать, иначе неверная предпосылка приведёт к неверным выводам. Тогда нужно компоненты разделять на две группы: выучку и инструменты. Инструменты и будут вторичны, хоть и черезвычайно важны. В эту группу войдут и джойстики, и кривые, и устройства обзора. Весь этот инструментарий облегчает выполнение какой то задачи, но никогда не заменит выучку.  В свою очередь выучка многогранна, тут и техника пилотирования, и работа с прицелом, тактика и т.д. Если с этим всё в порядке, то хороший инструмент даст кумулятивный эффект, если нет, то может конечно как то компенсировать, но хуже, когда ни того, ни другого.

    Ну и дистанция сведения, да, вроде как бы и вторична, но если копнуть глубже?  Например, хороший пилотажник, но посредственный стрелок, взял и поставил сведение 150м. Что получил? На этой дистанции диаметр круга в который лягут 70% попадания будет равен 1м (соответствует в среднем миделю фюзеляжа), убойность на этой дистанции у любого калибра наилучшая. Стрелять (прицельно) он сможет только с малых ракурсов, тогда поправки не нужны или очень малы. Но с другой дистанции он уже не попадёт. Осталось дело за малым, суметь выйти на эти самые 150м. Но он же хороший пилотажник.

    Второй пример, хороший стрелок и посредственный пилотажник. Этот уповает на стрельбу, дистанция сведения у него больше, ему нужен угол от 90градусов, т.е. с этого угла он уже может попасть. Значит он может не ввязываться в ближний бой, на большой дистанции летать и т.д.

    Ясно же, что у этих пилотов будет разная тактика и соответственно разный навык. Вот и получается, что сведение волей неволей, а является определяющей доминантой манеры боя, просто об этом никто не задумывается.

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

    Вот тем у кого есть возможность на лету менять кривые можно попробовать поставить "скоростной делитель".  Поскольку лётчик лучше реагирует на загрузку ручки, а не на её перемещение и учитывая, что одинаковой перегрузке на разных скоростях соответствует одинаковое усилие на РУСе (перемещения же будут разными), можно поставить переключатель типа всё по 100-всё по 50.  Для основных скоростей всё по 100, для малых и больших всё по 50. Получится некий заменитель обратной связи (был бы вообще хорош, если бы работал непрерывно снимая скорость с игры), единственный недостаток (который современные конструкторы считают достоинством), это и одинаковый ход ручки.

    #ВСЁПОСТО# правильный подход, даже 256 отсчётов на ось нормально позволяет летать, главное что бы не было люфтов, заеданий и дрожаний (и прочих нехороших...).

     

     

  2.  

    Летать пока не могу, вот и решил по-эпистолярничать. Когда-то в 1991г в журнале "Изобретатель и Рационализатор" вышла статья к.х.н О.Лебедева о самогоноварении... Преамбулой статьи было такое рассуждение: "Коль скоро процесс не запретить, то нужно, что бы он происходил с наименьшим ущербом для здоровья", ну и т.д. и т.п. Так вот и я, сам всегда летаю #всёпосто#, но в последнее время (в ТС) нет, нет, да и слышу про настройку кривых. Более того, знаю одного вирпила, который вообще считал, что успешность в бою, достигается именно в некоем хитром подборе кривых отклика, который от него утаивают успешные игроки. Ну, что взять с милиционера-пенсионера, у него такой профессиональный и житейский опыт. Но мы пойдём другим путём(с). Попробуем разобраться в настройках кривых отклика строго на научной основе, амбициозно конечно, но попытаюсь осветить (хочется написать "освЯтить") вопрос, во всяком случае так, как я его понимаю.

    Для начала, а дело было в начале, в 2004г, мне попались уж не помню на каком сайте, настройки кривых, которые я переписал и вот сейчас их обнаружил, и даю их как записаны:

    Classic
    X
    Y10-20-30-40-50-60-70-80-90-100
    Z
    сглаживание 1.0 мёртвая зоно 0.0
     Для всех остальных , сглаживание и м.з равны 0
    кроме того если цифры даны в одну строку, то они одинаковы для всех осей, иначе будут расписаны конкретно по осям

    Middle
    X
    Y10-20-30-40-50-60-70-80-90-100
    Z

    Hard
    X
    Y всё по 100
    Z

    Best Fire
    X
    Y8-10-14-20-27-35-44-55-73-100
    Z

    Preset 6
    X
    Y31-36-39-46-53-60-70-80-90-100
    Z

    Preset Cobra I
    Xвсё по 100
    Y100-95-90-85-80-75-70-65-60-55
    Zвсё по 100
     
    Сам я получается летаю на Hardе, но когда то пробовал и Preset Cobra I, на этих настройках Р-39 действительно летает хорошо, мягче по ощущениям, хорошая меткость при стрельбе, но иногда хода ручки не хватает и если уж сорвал её в штопор (что при таких настройках бывает исключительно редко), то вывести без триммера не получится, просто не хватает хода ручки.
     Эти настройки судя по их названиям придумали буржуи, они в то время активно занимались старичком, тот же Sniper*sCorner  например. По какому критерию подбирались настройки я не знаю, вернее не знаю использовался ли при этом какой то "научный" подход или просто "методом тыка".
    Но поскольку я обещал "другой путь", то попробую дать теоретическое обоснование подбору кривых (или его ненужности). Итак, немного в историю (реальную) вопроса. Впервые кажется у Остоградского, в одном из его пособий было на эту тему, Потом У Егера в учебнике по самолётостроению. Всё базировалось вот на таком графике (см ниже) взятом из учебника для лётного состава "Практическая аэродинамика маневренных самолётов" под редакцией Лысенко М.1977г. Суть его в том, что при малых перемещениях ручки и при малых нагрузках на неё, возрастает относительная ошибка управления, кстати и при больших (больше оптимальных) значениях, она тоже возрастает, упираясь в предел физических возможностей пилота. Нас же интересуют именно малые отклонения и именно в этом дапазоне и предлагали вышеупомянутые учёные переходить от линейной зависимости к нелинейной. Философия их рассуждений в основном укладывалась в такую формулу: При малых потребных изменениях расхода ручки-малое передаточное отношение от ручки к управляющей поверхности, и наоборот при больших - большое. Другими словами малое отклонение рулевых поверхностий создаётся большими расходами ручки, а большое малыми. Тут необходимо пояснение, для того, что бы уверенно пилотировать на малых и очень больших скоростях, ручку нужно перемещать небольшими порциями, для того, что бы не выйти на углы сваливания и не превысить эксплуатационную перегрузку (не сломать самолёт). Но поскольку при малых перемещениях относительная ошибка возрастает, то и было предложено "растянуть" околонулевой диапазон, т.с. "изменяя настройки кривых".  В нашем случае это стоит делать, если по каким то конструктивным соображения используемый джойстик не позволяет производить точное управление в околонулевой зоне. В принципе считается достаточно точным, управление позволяющее отклонят рулевые поверхности с точностью в 1градус. Вот к примеру возьмём джой СН, его дискретность 256 отсчётов на ось, будет ли он нуждаться в подстройке кривых или нет? Давайте подсчитаем, смотрим по счётчику в игре, а она сейчас позволяет точность 2048 отсчётов на ось, тогда 2048/256=8отсчётов минимум. Вроде как бы и немного, получится ли тут дискретность в один градус? В среднем рули высоты отклоняются на 30градусов в каждую сторону, тогда для отклонения руля высоты на 1градус, нужно отклонить джойстик на:2048/60=34 отсчёта. Учитывая что требуемое значение превышает имеющийся минимум в 4 (округлённо) раза, то точность даже с таким разрешением вполне достаточна. Если используются джойстики с более высоким разрешением, то тут тем более вопрос отпадает. У меня сейчас именно СН (Х52 временно дисквалифицирован), правда я использую его без пружин и поэтому точность меня устраивает. Загрузка в околонулевой зоне тоже влияет на точность управления, тут она не должна быть сильной, иначе опять таки будет большая относительная ошибка в управлении. Впрочем настройкой кривых (экспонентой) пользуются пилоты радиоуправляемых моделей и 3D-пилотажники, причём как и у верпилов там тоже есть приверженцы #всёпосто#.  А вот разработчики современных автоматических систем управления, вообще используют принцип "одинакового перемещения и загрузки, не зависимо от скорости и высоты полёта". Т.е. моторика движений при перемещении РУСа у пилота всегда (независимо от скорости и высоты) одинакова, автоматика подбирает передаточные числа и загрузку. Кстати можно сделать и в нашем случае нечто подобное.

    Для тех кто всё таки хочет поэкспериментировать с кривыми отклика, могу предложить следующюю методику.Интересующая нас точность, во всяком случае в канале тангажа, 1g. Поскольку изменения кривых будут одинаковы для малых и очень больших скоростей, то настраивать их лучше от большой скорости. Для чего выключить кокпит, тогда у вас будет виден акселерометр (указатель перегрузки), затем разогнать самолёт, например до 600км/ч и поддерживая её (в снижении), изменять перегрузку управляемо, с точностью до 1g, с фиксацией на нужном значении. Например 1-2-3-4-5-2-3-1-4. Если так не получается, то уменьшать кривую отклика, до тех пор пока не будет получаться точное значение по вашему выбору. Т.е тем самым уменьшить относительную ошибку управления. Для контроля, на большой скорости, попасть по малоразмерной цели, либо пролететь под мостом или через ангар, словом сделать, что то, требующее точного управления. Ну и попробовать удержать самолёт без сваливания в горизонтальном полёте на минимальной скорости, потом на восходящей спирали, тоже на минимальной скорости, причём для винта с левым вращением в правой спирали, а с правым, в левой.

     Примечание: если контрольные упражнения получаются и без корректировки кривых, то не морочте себе яйца!

    И ещё, незнаю, будет ли это иметь боевое значение, но пилотажное (как утвержает автор патента) будет, итак патент (не мой):

    Способ улучшения характеристик поперечной управляемости спортивного пилотажного самолета

    Изобретение относится к авиационной технике, в частности к спортивным пилотажным самолетам. Изобретение позволяет уменьшить амплитуду обратного хода ручки при выполнении самолетом бочек и повысить точность стабилизации угла крена. Сущность: связь между отклонениями ручки управления и элеронов делают нелинейной и при этом реализуют монотонно убывающую зависимость градиента нарастания угла отклонения элеронов по перемещению ручки управления от максимального значения градиента, равного 30 - 40 град/1 в области нейтрального положения ручки управления, до значений 0 - 5 град/1 при ее полном отклонении. 4 ил.
    Изобретение относится к авиационной технике, в частности к спортивным пилотажным самолетам.
    Известен способ улучшения характеристик управляемости спортивных пилотажных самолетов по крену, заключающийся в применении на элеронах выносных компенсаторов типа "Аэро" (Техника воздушного флота. N 2, 1990, с. 70, авт. М.П.Симонова, Б.В.Ракитина, А.Г.Чернова, С.Т.Кашафутдинова, Ю.А.Кочеловского). Этот способ позволяет снизить нагрузки на ручке управления Pэmaxдо приемлемых без ухудшения эффективности элеронов. Однако при малых отклонениях ручки (хэ) от нейтрали градиент усилия по перемещению Pэxэ резко падает, что затрудняет четкую фиксацию заданных углов крена при выполнении бочек, особенно фиксированных одних из распространенных фигур высшего пилотажа по самолетному спорту. Кроме того, для остановки вращения по крену необходимы обратные движения ручки управления. Для спортивных пилотажных самолетов системы управления обеспечивает линейный закон отклонения элеронов  э от перемещения ручки, что требует значительных по амплитуде обратных движений ручки. Это обстоятельство наряду с малым градиентом Pэxэ в области хэ  0 ухудшает характеристики поперечной управляемости спортивных пилотажных самолетов при выполнении бочек.
    Наиболее близким по технической сущности является способ улучшения характеристик поперечной управляемости, применяемый для высокоскоростных самолетов, в основном истребителей, заключающийся во введении в проводку управления элеронами нелинейной кинематической связи. Данный способ состоит в уменьшении значения производной  эxэ в области малых перемещений ручки от нейтрального положения при сохранении полного диапазона углов отклонения элеронов (фиг.1), (Проектирование самолетов. Под редакцией С.М.Егера, с. 508, Москва, изд-во "Машиностроение", 1983). Отмечается простота реализации способа и его высокая эффективность при полете самолетов в области транс- и сверхзвуковых скоростей. Однако его использование на спортивных пилотажных самолетах, имеющих максимальную скорость не более 450 км/ч, не позволяет уменьшить по амплитуде обратных движений ручки для остановки вращения по крену при выполнении бочек. Это объясняется тем, что обратные отклонения элеронов (ручки) осуществляются в области малых значений (  э), что из-за пониженных величин производной  требует даже большого обратного хода ручки, чем при линейной зависимости  э(хэ).
    При разработке предлагаемого способа была поставлена задача улучшения характеристик поперечной управляемости спортивного пилотажного самолета, которое должно проявляться в уменьшении обратного хода ручки для остановки вращения самолета по крену при выполнении бочек и повышении точности стабилизации угла крена без снижения максимально развиваемых угловых скоростей крена и без увеличения максимальных усилий на ручке управления. Задача решается за счет того, что также, как у способа прототипа, связь между отклонениями ручки управления и элеронами делается нелинейной, но имеющей иной характер (фиг. 2). А именно реализуется монотонно убывающая зависимость градиента нарастания угла отклонения элеронов по перемещению ручки управления  от максимального значения градиента, равного 30.40 град/1 в области нейтрального положения ручки ( =0), до значений 0.5 град/1 при ее полном отклонении ( = 1), (фиг. 3). Использование в способе предлагаемой нелинейной зависимости  э( ) с указанными диапазонами изменения градиента нарастания угла отклонения элеронов по перемещению ручки позволяет облегчить пилоту выполнение фигур высшего пилотажа, связанных с вращением самолета по крену. Способ так же, как способ-прототип, не требует применения в системе управления элеронами сложных по конструкции механизмов и может быть реализован после некоторых доработок систем управления на серийно выпускаемых пилотажных самолетах. В качестве примера, иллюстрирующего эффективность предлагаемого способа, рассмотрено выполнение фиксированной бочки на 90опилотажно-акробатическим самолетом Су-26М для различных законов отклонения элеронов по перемещению ручки управления. На фиг.4 показана полученная при помощи математического моделирования изолированного движения крена зависимость отношения обратного хода ручки к прямому от величины производной  . Видно, что при сохранении полного диапазона отклонения элеронов, а следовательно, и значений максимальных угловых скоростей крена, увеличение градиента  по сравнению с исходным, соответствующим линейной зависимости  э( ), в 1,5. 2 раза приводит к трех-семикратному уменьшению амплитуды обратного хода ручки. Кроме того, в данном случае за счет уменьшения потребного хода ручки в области  0 для отклонения элеронов на один и тот же угол увеличивается абсолютное значение производной шарнирного момента элеронов по  при  0, что должно способствовать точности стабилизации угла крена. Это, наряду с уменьшением амплитуды обратного хода ручки, благоприятно скажется на характеристиках поперечности управляемости спортивного пилотажного самолета.
    Формула изобретения
    СПОСОБ УЛУЧШЕНИЯ ХАРАКТЕРИСТИК ПОПЕРЕЧНОЙ УПРАВЛЯЕМОСТИ СПОРТИВНОГО ПИЛОТАЖНОГО САМОЛЕТА, заключающийся тем, что связь между отклонениями ручки управления и элеронов делают нелинейной, отличающийся тем, что реализуют монотонно убывающую зависимость градиента нарастания угла отклонения элеронов по перемещению ручки управления от максимального значения градиента, равного 30 40 град/1 в области нейтрального положения ручки управления, до значений 0 5 град/1 при ее полном отклонении

    Для не авиационного специалиста, это сложновато для восприятия, ну а лётчики поймут. Для всех остальных просто приведу значения кривых по каналу крена предлагаемых в этом патенте (вычисленных по графику)

    X200-189-178-167-156-144-131-120-108-100

    Вот вроде и всё, что хотел сказать поданному вопросу. Спасибо за внимание!

    P.S.
     При копировании патента обозначения скопировались не корректно, вручную поправить не могу, нет таких букв на моей клавиатуре, так, что звыняйтэ, бананив нема! 

    Безымянный.JPG

    Безымянный 2.JPG

    Безымянный3.JPG

    Безымянный4.GIF

    Безымянный5.JPG

  3. Начну издалека... Вот откуда ноги растут, товарищи красные пилоты? Вот и я думаю, что оттуда! Всё последнее время об этом думал, когда  приходилось вести бои с несколькими противниками, причём если (используем шахматные термины), в дебюте ещё может быть 1х1, то в миттельшпиле, и особенно в эндшпиле, как минимум 1х2, 1х3. И как они хоронят, как они хоронят!(с) Понятно, что без ТСа тут не обходится. Посидел пару дней в ТС (в нашем), думал может кто зайдёт из красных ( у синих всё в порядке всегда несколько человек), ан нет. Вчера булл пригласил меня в синию комнату, я зашёл, но остался летать за красных, Так вот, они летают со связью, надо ли говорить, что это существенно повышает выживаемость в бою, думаю, что нет. На вопрос "Почему красные не используют ТС ?", ответить было нечего. Действительно, неужели только я заметил взаимодействие синих? А если это не так, то почему летаем молча?  Я конечно понимаю, что среди нас могут быть люди не знающие русского языка, глухонемые и т.п. но остальные то на великом  и могучем, думаю говорят. Так, что заходим не стесняемся! И. да, живое общение намного лучше бездушного чата, который даже "грубого военно-морского юмора"(с) не понимает. :pilot1:

  4. Вам хочеться песен?

    Их есть у меня! (С)

    Не то, что бы очень, но есть время, почему бы и не поразмышлять.

    Итак:

    18 часов назад, Just сказал:

    в целом нравится за исключением не соответствия баланса сил. Численный перевес одной из сторон не позволяет многим вирпилам проявить себя в игре

    Что тут сказать, правила, очевидно не для всех, плюс очень много предвзятых игроков, которые принципиально не летают, за красных (синих) потому, что... мотивы различны и зачастую  политизированы. Хотя путать жизнь и игру, это знаете ли....

    19 часов назад, Just сказал:

    В большинстве представленных карт красные крафты имеют преимущество и являются «уберами». На основании этого считаю, что не корректно сравнивать мастерство «красных» и «синих» вирпилов по одной шкале. Многие со мной согласятся, что «лавки» и отдельные типы «спитов» значительно превосходят синие крафты, как в скорости, так и в маневренности.

    В большинстве своём крафты (в разной конечно степени), соответствуют своим историческим аналогам. Мне думается, что и реальные немецкие пилоты не очень то любили драться на виражах с красными. Какой вид боя они предпочитали, надеюсь не секрет. Другое дело, что пытаются исполнять в игре, но тут каждый сам кузнец своего несчастья. И  да, эффективность у красных в реале, была не в числе сбитых, а в количестве успешных сопровождений и прикрытий с недопущением противника на обьект. У синих же в приоритете боло именно увеличение счёта (я про истребители). Так вот в игре, по крайней мере на Алексе, всё же синяя концепция эффективности. По сему инструмент синим пилотам дан отличный, ну, а коль скоро они будут пытаться перевиражить лавку или ЛаГГа со спитом, то думаю им будет не весело. Опять же замечу, что нет у красных крафтов, идеально подходящих для всех видов боя, во всём диапазоне высот и скоростей, в отличии от стабильного в этом плане (до 7000м) Г2.  Другое дело, что каждый пытается вести бой в выгодном диапазоне, но это же естественно.  Так, что  здесь всё таки IQ играет свою роль.

    19 часов назад, Just сказал:

    Однако, я хочу обратить внимание на то, что навыки пилотирования вирпилов с опытом полетов в несколько лет не значительно отличаются.

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

     

    21 час назад, Just сказал:

    Возникает закономерный вопрос, почему отдельные вирпилы стреляют, лучше снайперов из группы «Альфа» и пилотируют крафты с филигранной точностью, а другие стреляют и летают, как среднестатистические вирпилы.

    Тут как раз всё просто, каждый человек являет из себя некий психотип, этот психотип гораздо объёмнее чем темперамент или интеллект. Всё зависит от того, зачем этот человек пришёл на сервер. Кого то интересует стат, кого то выигрыш в любом случае, кто то отдыхает и т.д, и т.п. От этого и зависит например стрельба и пилотаж (как производное). Например, как стреляет снайпер и неснайпер, ОДИНАКОВО! С одной лишь НЕ БОЛЬШОЙ РАЗНИЦЕЙ. И тот и другой, стреляет всегда (не зависимо от дистанции), когда есть угол для стрельбы. Только первый стреляет осознано, посчитав прицел, а второй потому, что видит цель и по ней надо выстрелить. Снайпер может и попасть, и зачастую попадает, а неснайпер попадёт разве, что случайно. В принципе для снайпера стрельба это не только инструмент для поражения противника, но и инструмент воздействия на него. Для неснайпера стрельба- удовлетворение амбиций.

    Если первый тип достаточно редок, то второй  же достаточно распостранен. И оба этих типа стрелков в принципе не интересны, с точки зрения реальной угрозы, первых мало - вторые не опасны. Гораздо интереснее те кто посередине, именно с ними приходиться в основном иметь дело. Вот сдесь есть несколько интересных моментов (про выеденное яйцо). Существует в воздушном бою дистанция стрельбы, на которой, как утверждали реальные пилоты, "промазать невозможно". Это действительно так, 100-150м, когда время подлёта снаряда к цели, даже при больших ракурсах, позволяет вести огонь без упреждения по переднему габариту цели, эта дистанция наиболее результативна, тем более, что в игре именно на этой дистанции наименьшее рассеивание. НО! Без умения пилотировать (и практически, и тактически), и в сущности выходить именно на эту дистанцию стрельбы, результати не будет. Если же уметь выходить на это дистанцию, то будешь супер снайпером, но тогда тактика и пилотаж первичны, так как помним, " со 100м промахнуться не возможно". Поэтому и выше по тексту, кто зачем пришел летать.

    22 часа назад, Just сказал:

    но по моему субъективному мнению, лучшими являются вирпилы  имеющие «навороченное железо»

    Это ошибка, многие подтвердят, что знавали отличных пилотов, летающих на слабых девайсах, хотя конечно же никто не будет отрицать, что хороший девайс предпочтительней. Я лично считал (и считаю), что лучший джоя для индивидуума, это тот, который он сделает сам (или ему сделают под его запросы), далее дело привычки и навыка, ну и мозгов конечно, ибо лучше хорошие мозги чем плохой джой,  :icon_mad:

  5. Вот обещаный трек, тут в принципе всё кроме стрельбы, минут на 6.

    Полёт на триммерах в блеке, тоже есть, пауза получилась когда вместо звуков назначал игровые щелчки (со звуковыми файлами лучше).

    DemoGlovePIE.ntrk

  6. / Управление уборкой и выпуском шасси в том чиcле и вручную при
    // нажатии кнопки джоя № 8,
    
    if (  pressed(Joystick1.Button8) ) {
    toggle( PPJoy1.Digital10 )
    }
    
    if ( pressed(PPJoy1.Digital10) ) {
        Key.G = true
        wait(50 ms)
        Key.G = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
         Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
         Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
         Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
          Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
        Key.L = true
        wait(50 ms)
        Key.L = false
    
    }
    
    
    if ( released(PPJoy1.Digital10) ) {
        Key.G = true
        wait(50 ms)
        Key.G = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
        Key.K = true
        wait(50 ms)
        Key.K = false
    
    
    }

     

  7. //Управление радиатором  кнопка джоя № 9
    
       PPJoy1.analog7 = -1.0
    
      if  ( pressed(Joystick1.Button9))  {
      PPJoy1.analog7 = PPJoy1.analog7 + 0.999
    }
    
     if  (PPJoy1.analog7 = 1.0) {
     PPJoy1.analog7 = -1.0
     }

    Наконец то протестировал скрипт.

    Делитель кривых отклика не впечатлил, без него лучше.

    Управление радиатором не логичное и громоздкое, заменяем его на вот этот изящный скрипт.

    Управляется простыми нажатиями, переключая радиатор последовательно по кольцу: 0-50-100-0.

    Так же на понравилось управление уборкой - выпуском шасси, его тоже меняем на более удобный скрипт.

    Тут тоже управление одной кнопкой и она же тормоз.

     

  8. Несколько советов.

    Иногда, отладка скрипта требует времени и тогда возникает необходимость, не выходя из игры

    подкорректировать скрипт.

    Но если скрипт выполняет какую то команду постоянно, например удерживает кнопку.

    Например команда записана с ошибкой вот так

        Key.L = true

    Вместо

        Key.L = true

        wait(50 ms)

        Key.L = false

    Тогда клавиша «L» будет как бы нажата и игра не даст выйти в Виндоус.

    В этом случае воспользуйтесь командой Shift PIE она отключит выполнение скрипта и позволит вам выйти в Виндоус.

     

    Все вышеизложенные скрипты работоспособны и проверены.

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

    Ошибки в синтаксисе (если возникнут), GlovePIE отметит красным цветом строки.

    Менее грубые, отметит розовым цветом строки.

    Отлаженный скрипт, работает как часы и НИКОГДА не глючит!

     

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

     

  9. // Управление уборкой и выпуском шасси в том чиcле и вручную при
    // нажатии кнопки джоя № 8, кратковременное - уборка, длительное -выпуск
    if (!var.running) {
    var.t = 0.235
    var.running = true
    }
    if (HeldDown(Joystick1.Button8, var.t)) {
    var.b8HeldDown = true
    PPJoy1.Digital10 = Joystick1.Button8
    }else if ( pressed(Joystick1.Button8))  {
        PPJoy1.Digital11 = true
        wait(230 ms)
        PPJoy1.Digital11 = false
     }
      if (released(Joystick1.Button8)) {
    var.b1HeldDown = false
    PPJoy1.Digital10 = false
    PPJoy1.Digital11 = false
    }
     if ( pressed(PPJoy1.Digital10) ) {
        Key.Y = true
        wait(50 ms)
        Key.Y = false
        Key.L = true
        wait(50 ms)
        Key.L = false
    //////////////////////не менее 100 //////////////
        Key.L = true
        wait(50 ms)
        Key.L = false
    
    
    
    }
    
    
    if ( pressed(PPJoy1.Digital11) ) {
        Key.G = true
        wait(50 ms)
        Key.G = false
        Key.K = true
        wait(50 ms)
        Key.K = false
    //////////////////////не менее 50//////////////
    
        Key.K = true
        wait(50 ms)
        Key.K = false
    
    
    }
    

     Управление уборкой и выпуском шасси, в том чиcле, вручную, и аварийно.

     

     

    Эта функция так же построена на определителе времени нажатия кнопки.

    Кратковременное нажатие кнопки джоя №8, включает уборку, в том числе и вручную.

    Нажатие с удержанием той же кнопки, включает выпуск, в том числе вручную и аварийно.

    В Панели Управления на уборку – выпуск шасси, назначить 2 клавиши: «Y» и «G».

    На уборку шасси вручную, назначить клавишу «К».

    На выпуск вручную, назначить «L».

    При таком варианте назначений, можно использовать ту же кнопку №8, в качестве кнопки тормоза, назначив её в ПУ, простым нажатием, при выключенном GlovePIE.

    Таким образом, одной кнопкой, вы будете управлять шасси, находясь в полёте, а во время движения по земле и тормозами.

    По причине не возможности, избежать (при любом способе нажатия на кнопку №8), цикла уборки, цикл выпуска (по количеству итераций клавиши «L»), вдвое больше количества итераций клавиши «К».

    Т.е. когда вы удерживаете кнопку и включаете выпуск, то при отпускании включается и уборка.

    Программа, выполняет нажатие клавиш «К» и «L»,  поочерёдно, но цикл с клавишей «К», короче.

    После того как он закончится, продолжается итерация клавиши «L» до полного выпуска.

    В приведенном фрагменте, количество итераций условно сокращено, в большом скрипте, нет.

     

  10. // Управление закрылками
       if ( pressed(Joystick1.Button3) ) {  // уборка кнопка джоя № 3
        Key.F = true                         // в ПУ клавиша F
        wait(250 ms)
        Key.F = false
        PPJoy1.analog6 = PPJoy1.analog6 -0.3 //значение оси уменьшено 
       }
        if ( pressed(Joystick1.Button4) ) {  // выпуск кнопка джоя № 4
        Key.V = true                          // в ПУ клавиша V 
        wait(250 ms)
        Key.V = false
        PPJoy1.analog6 = PPJoy1.analog6 +0.3 //значение оси увеличено
       }
    
    
    //  Сигнализация выпуска закрылков
    
    var.int = round(MapRange(PPJoy1.analog6, 0, 1, 0, 100))
    if ( INRANGE (var.int, 05, 100 ) ) {
    playsound "d:\sounds\ding"
    wait(500 ms)
    
    }

     Управление закрылками и сигнализация их положения.
    Для выполнения указанных функий используются, две кнопки (№ 3 - уборка, №4 - выпуск) реального джоя.
    Две клавиши: "F"- уборка, "V"- выпуск и виртуальная ось, опорная для включения сигнализации. 
    Тут всё просто, желательно, что бы кнопки  джоя, распологались рядом, для удобства 
    управления (а ля хатка)
    Назначаете клавиши на уборку и выпуск закрылков в ПУ.
    Скрипт помимо нажати клавиш, будет изменять значения опорной оси, 
    при уборке уменьшать на 30%     PPJoy1.analog6 = PPJoy1.analog6  -0.3
    при выпуске увеличивать на 30% PPJoy1.analog6 = PPJoy1.analog6 +0.3
    Опорная ось сигналицации, при значении от 05 до 100, будет включать звуковой сигнал,
    а при значении от 0 до 05, будет сигнал выключать.
    На крафтах с автоматической уборкой закрылков, при их атоуборке,
    звук не выключится, надо будет нажать на кнопку уборки, столько раз 
    сколько было нажато на выпуск (для изменения значения оси сигнализации).

  11. Управление радиатором.

    В основном скрипте обеспечивается только две установки радиатора, 50% и 100%, что в принципе достаточно для полётов и боя.
    Тем не менее, иногда нужно и полное закрытие.
    Для того, что бы обеспечить три положения радиатора при помощи одной кнопки, в приведеном скрипте, пришлось "скрестить" два оператора распознавания
    нажатия кнопок.
    Первый работает на распознавании "двойной клик vs одинарный клик".
    Второй оператор подобен уже рассмотренным выше, определителям времени нажатия кнопок.
    Конструкцию  скрипта можно было бы упростить, сразу назначив прямые команды для оси радиатора, но тогда из игры не получалось вийти в Винду.
    Хотелось всё же, что бы всё работало правильно, поэтому теперь, скрипт, сначала включает виртуальные кнопки, а уж они, определяют значения осей, в таком варианте обеспечивается выход в Виндоус при включённой игре. 
    Естественно в Userовском профиле назначить  на ось виртуального джоя, ось радиатора:
    AXE_RY JoystickDevice1=-radiator
    B GlovePIE она числится как:
    PPJoy1.analog7.
     Алгоритм работы такой:
    1) кратковременное нажатие (  менее 0.2сек)  радиатор 100%;
    2 )двойной клик -                                            радиатор  50%;
    3) удержание (более 0.2)                                 радиатор   0%;
    Напомню, все манипуляции кнопкой №9, реального джоя и ещё, при закрытии радиатора с положения 50%,
    радиатор в течении 0,5 сек перейдёт в положение 100%, потом 0%, а из положения 100%, при закрытии, сразу в 0%.
     

  12.  // Управление радиатором кнопка %9 реального джоя
    
    
     if (!var.running) {
    var.t = 0.2  // время для определения двойного клика
    var.tDoubleClick = 0.2
    var.tB9Release = 0
    var.running = true
    }
    var.now = timestamp
    if (pressed(Joystick1.Button9)) {
    if (((var.now - var.tB9Release) < var.tDoubleClick)) {
    var.B9DClick = true
    }
    } else if (released(Joystick1.Button9)) {
    var.tB9Release = var.now
    if (var.B9Dclick) {
        PPJoy1.Digital12 = true
        wait(100 ms)
        PPJoy1.Digital12 = false
    var.B9Dclick = false
    var.tB9Release = -1
    } else {
        PPJoy1.Digital13 = true
        wait(100 ms)
        PPJoy1.Digital13 = false
    }
    }
     if (!var.running) {
    var.t = 0.5 // время для определения удержания кнопки
    var.running = true
    }
    if (HeldDown(Joystick1.Button9, var.t)) {
    var.b9HeldDown = true
     wait(1 s) //задержка дли закрытия радиатора
        PPJoy1.Digital14 = true
        wait(100 ms)
        PPJoy1.Digital14 = false
    }
    }
    if ( pressed(PPJoy1.Digital12) ) {
    PPJoy1.analog7 = 0.0   // радиатор 50%
    }
    if ( pressed(PPJoy1.Digital13) ) {
    PPJoy1.analog7 =1.0    // радиатор 100%
    }
    if ( pressed(PPJoy1.Digital14) ) {
    PPJoy1.analog7 = -1.0  // радиатор 0%
    }
    
     if (released(Joystick1.Button9)) {
    
    var.b9HeldDown = false
    PPJoy1.Digital12 = false
    PPJoy1.Digital13 = false
    PPJoy1.Digital14 = false
    }

    Здесь кое что новое, днём распишу.

  13. // Управление режимами огня (Фиксированная очередь в 3 вариантах)
    
    //   Первый (базовый) вариант
    
      if ( pressed(Joystick1.Button1) ) {  //при нажатии кнопки джоя № 1
        PPJoy1.Digital0 = true
        wait(230 ms)                       // длительность очереди в мс (230 ms)
        PPJoy1.Digital0 = false
     }
    
     Key.NUMPAD1 = PPJoy1.Digital0 //в ПУ  назначить на клавиши "NUMPAD1"  нужное оружие (одинаково для всех вариантов)
    
    
    //  Второй вариант
    
    
     PPJoy1.Digital0 = Joystick1.Button1  // добавлена строка 
     if ( pressed(Joystick1.Button1) ) {  // при нажатии кнопки джоя № 1
        PPJoy1.Digital0 = true
        wait(1 s)                       // длительность очереди в секундах  (1 сек)
        PPJoy1.Digital0 = false
     }
    
    
    //  Третий вариант
    
    
     if ( pressed(Joystick1.Button1) ) {  //при нажатии кнопки джоя № 1
        PPJoy1.Digital0 = true
        wait(230 ms)                       // длительность очереди в мс (230 ms)
        PPJoy1.Digital0 = false
    
     }
    
    if (!var.running) {
    var.t = 0.235       // временной интервал после которого
    var.running = true  // огонь непрерывный
    }
    if (HeldDown(Joystick1.Button1, var.t)) {
    var.b1HeldDown = true
    PPJoy1.Digital0 = Joystick1.Button1
     }
      if (released(Joystick1.Button1)) {
    
    var.b1HeldDown = false
    PPJoy1.Digital0 = false
    }

    Режимы огня.

    Эту часть дам в расширенном виде.

    В скрипте приведён базовый вариант (первый), длина очереди в нём задаётся командой  wait и временным 
    значением в нашем случае 230 мсек.
    При любом нажатии (кратковременном или длительном) оружие произведётт определённое количество
    выстрелов (в зависимости от своей скорострельности и времени стрельбы), вы как бы стреляете из пистолета.

    Второй вариант отличается от первого тем, что в нём в начале добавлена строка
    PPJoy1.Digital0 = Joystick1.Button1  // добавлена строка  
    Так же изменено время, до 1 сек,
    Тогда количество выстрелов будет зависеть от времени нажатия кнопки, но не более чем оружие сможет выстрелить за 1 сек.
    Т.е. если в 1 сек оружие делает 10 выстрелов, то вы циклично и быстро, нажимая гашетку, сможете сделать несколько очередей
    пока их общая длина не станет равной 1 сек (т.е. сделать 10 выстрелов), либо нажав и удерживая гашетку, выстрелить те же 
    10 выстрелов  одной очередью, либо кратковременно нажав, можете сделать очередь любой длины менее 10 выстрелов. 
    Опять аналогия, но уже с автоматом, увеличивая или уменьшая время (wait), вы как бы меняете ёмкость магазина, а отстрелять 
    его можете хоть в несколько очередей, хоть в одну.

    Третий вариант похож на тот, что в игре, нажали гажетку - оружие стреляет, отпустили - не стреляет.
    Разница в том, что кратковременное нажатие ( менее 235 мсек), даст фиксированую очередь (как в первом варианте).
    Если гашетка будет удерживаться больше 235 мсек, то стрельба будет непрерывной.
    Этот вариант состоит из 2 частей, из базового и определителя времени нажатия ( подобный расписан в управлении взглядом).

    Лично я, использую первый (базовый вариант).

  14. // Управление шагом - газом совмещённое с дырчем
    
    
    var.int = round(MapRange(-Joystick1.RZ, -1, 1, 0, 220))  // разметка оси реального устройства (РУДа)
    
    if ( INRANGE (var.int, 0, 10 ) ) { // если значение оси РУДа в диапазоне от 0 до 10
    PPJoy1.analog3 =  -1.00          // шаг 0%
    playsound "d:\sounds\chimes"  // играть звуковой файл
    wait(500 ms)                           // интервал проигрывания
    }
    
    if ( INRANGE (var.int, 30, 40 ) ) { // если значение РУДа от 30 до 40
    PPJoy1.analog3 =  1.00            // шаг 100%
    PPJoy1.analog4 =  1.00            // тяга    0%
    }
    
    if ( INRANGE (var.int, 60, 70 ) ) { // если значение оси РУДа в диапазоне от 
    PPJoy1.analog3 =  1.00            // шаг 100%
    PPJoy1.analog4 =  0.45            // тяга   30%
    }
    
    if ( INRANGE (var.int, 90, 100 ) ) { // если значение оси РУДа в диапазоне от 
    PPJoy1.analog3 =  0.00              //  шаг  50%
    PPJoy1.analog4 =  0.09              //  тяга  50%
    }
    
    if ( INRANGE (var.int, 120, 130 ) ) {// если значение оси РУДа в диапазоне от 
    PPJoy1.analog3 =  0.60               // шаг 80%
    PPJoy1.analog4 =  -0.44              // тяга 80%
    
    }
    
    if ( INRANGE (var.int, 150, 160 ) ) {  // если значение оси РУДа в диапазоне от 150 до 160
    PPJoy1.analog3 =  1.00                 // шаг 100%
    PPJoy1.analog4 =  -0.82                // тяга 100%
    }
    
    if ( INRANGE (var.int, 180, 190  ) ) { // если значение оси РУДа в диапазоне от 180 до 190
    PPJoy1.analog3 =  1.00                 // шаг 100%
    PPJoy1.analog4 =  -1.00                // тага 110%
    }
    
    if ( INRANGE (var.int, 210, 220 ) ) { // если значение оси РУДа в диапазоне от 210 до 220
    PPJoy1.analog3 =  -1.00               // шаг 0%
    playsound "d:\sounds\chimes"      // играть звуковой файл
    wait(500 ms)                                // интервал проигрывания
    
    }

    Управление шагом - газом совмещённое с дырчем.

    Подобный блок я уже описывал выше, тут ничего сложного.
    Нужно прописать в своём конфиге (в папке User) оси тяги и шага, в нашем случае 
    AXE_RX JoystickDevice1=pitch
    AXE_RZ JoystickDevice1=-power
    В GlovePIE они у нас 
    PPJoy1.analog3 = шаг
    PPJoy1.analog4 = тяга
    Обратите внимание, номер оси шага меньше номера оси тяги, это нужно для того, что бы на мониторе писалось 
    изменение тяги (а не шага), что удобнее для контроля.
    Конструкция блока типична, разбивается на условный диапазон реальная ось РУДа (например) 
    var.int = round(MapRange(-Joystick1.RZ, -1, 1, 0, 220))
    и в нужных участках назначаются прямые команды на значения осей шага и тяги, например:
    if ( INRANGE (var.int, 90, 100 ) ) {//если РУД находится в диапазоне от 90 до 100 (т.е. почти посередине между 0 и 220)
    PPJoy1.analog3 =  0.00     // шаг 50%
    PPJoy1.analog4 =  0.09     // тяга 50%

    Первая и последняя части этого блока меняют только шаг в 0% и при этом включают звуковой сигнал (это помогает
    не передать РУД, когда нужны крайние значения тяги (0% или 100%) при шаге !00%).
    Эти части можно безболезненно убрать, также можно отдельно убрать и озвучку.
    Кстати убирать можно не стирая строку, а ставя  перед ней //
    Так работает: playsound "d:\sounds\chimes"
                          wait(500 ms)
    Так нет       :// playsound "d:\sounds\chimes"
                      // wait(500 ms)

    И ещё, надо смотреть уменьшает или увеличивает своё значение ось Реального РУДа и если нужно, менять при помощи знака.
    У меня РУД сайтека, он при ходе вперёд уменьшает значение оси, поэтому перед определителем оси и на значении осей в скрипте, стоит знак минус
    тогда РУД значение увеличивает (минус на минус дают плюс) :-Joystick1.RZ, и например PPJoy1.analog4 =  -1.00  // тага 110%
    В Панели Управления на осях шага и тяги выключить симметричность.


     

  15. /* Управление приближением взгляда, взгляда через прицел
     и изменение кривых отклика при приближением взгляда*/
    
    // Управление приближением взгляда всё работает при нажатии кнопки джоя № 7
    
     Key.Z = Pressed(PPJoy1.Digital4) /* назначить в ПУ кнопку "Z"
     на прильнуть к прицелу */
     Key.X  = Released(PPJoy1.Digital4) /* назначить в ПУ кнопку "X"
     на широкоугольный обзор */
    
    }
    
    // переключатель кривых отклика
    if ( released(PPJoy1.Digital4) )     { // если отпущена то
    PPJoy1.analog0 = Joystick1.X    // Ось Х кривые отклика по 100%
    PPJoy1.analog1 = Joystick1.Y    // Ось Y кривые отклика по 100%
    PPJoy1.analog2 = Joystick1.Z   // Ось Z кривые отклика по 100%
    }
    if (PPJoy1.Digital4 == 1 )     {                         // если нажата то
    PPJoy1.analog0 = Joystick1.X /2   // Ось Х кривые отклика по 50%
    PPJoy1.analog1 = Joystick1.Y /2   // Ось Y кривые отклика по 50%
    PPJoy1.analog2 = Joystick1.Z /2  // Ось Z кривые отклика по 50%
    }
    
    // взгляд через прицел
    if ( released( Joystick1.Button7) )     { /*если отпущена кнопка джоя № 7
    переключается функция "смотреть чкрез прицел"
    в ПУ назначить на неё клавишу NUMPAD8 */
        Key.NUMPAD8 = true
        wait(50 ms)    //время в течении которогобудет нажата клавиша
        Key.NUMPAD8 = false
    }
    
    
    
    // переключатель(быстрое нажатие-взгляд через прицел,длительное-приближение)
    
    if (!var.running) {
    var.t = 0.25        /*временной интервал после которого
                          взгляд будет приближен */
    var.running = true
    }
    if (HeldDown(Joystick1.Button7, var.t)) { /* если время нажатия
                                     больше 0.25с, то выполняется */
    var.b7HeldDown = true      /* прильнуть к прицелу и
                               кривые отклика по 50% */
    PPJoy1.Digital4 = Joystick1.Button7 /*кнопка "смотреть через прицел"
                                         нажата, переключения ещё нет */
    }
    if (released(Joystick1.Button7)) { //если  кнопка джоя отпущена то
    
    var.b7HeldDown = false /* выполняется команда "широкоугольный обзор"
                               и кривые отклика по 100% */
    PPJoy1.Digital4 = false  /* кнопка "смотреть через прицел" отпущена,
                                 переключение произошло */
    }

    Управление приближением взгляда, взгляда через прицел и изменение кривых отклика при приближением взгляда.

    Этот блок пожалуй самый сложный в скрипте.
    Вот какие функции он выполняет:
    При помощи нажатия клавиш Z и X осуществляется приближение и удаление взгляда.
    Клавиша Z включаются при нажатии кнопки №4 виртуального джоя №1 Pressed(PPJoy1.Digital4)
    Клавиша Х включаются при отпускании той же кнопки (Released(PPJoy1.Digital4.
    Приближение взгляда не фиксировано, т.е. приближение есть пока нажата кнопка.

    В этот блок включён и делитель кривых отклика, если нажата (и удерживается) всё та же кнопка №4 (PPJoy1.Digital4), то кривые отклика будут уменьшены на 50% (вдвое), полный расход ручки даст в игре только половину отклонения кривых. 
    Делитель так же работает только при нажатой кнопке.
    Кроме того, если в момент работы делителя, рули дойдут до крайнего положения (что в игре будет считаться только половиной ) и будут в этом положении удержаны,  а потом делитель будет выключен, то рули резко примут реальное значение.

    Блок делителя, если он не нужен можно, просто удалить из скрипта или поставить его отдельно с возможностью фиксации.

    Взгляд через прицел.
    Функция управляется кн №7 реального джоя.
    Переключение происходит (внимание!) не при нажатии на кнопку, а при её отпускании if ( released( Joystick1.Button7) ) .
    Это сделано для удобства переключения т.е. если выбран нужный режим (кратковременными нажатияими), то он не должен "сбиватьмя" при последующим длительным.
    Само же переключение выполняет клавиша NUMPAD8 цифровай панели, именно на неё в Пульте Управления и необходимо назначить эту функцию.

    Теперь как устроен сам блок переключения.
    Общий алгоритм работы базируется на определителе времени нажатия кнопки.
    Время нажатия (в сек.) задаётся здесь: var.t = 0.25        /*временной интервал.
    Т.е. если время нажатия кнопки больше 0,25 сек. то включается приближение взляда и делитель кривых, а при отпускании взляд, отдаляется, делитель 
    выключается и функция "смотреть через прицел" переключается.
    Если время нажатия меньше, переключается только функция "смотреть через прицел" . 
    Принцип управления такой: короткими нажатиями на кнопку выбираем режим, например: "смотреть через прицел" , потом нажимаем и удерживаем ту же кнопку, взгляд приближается, пользуемся, потом  отпускаем кнопку, взгляд удаляется и функция "смотреть через прицел" переключается.
    Этот блок можно установить отдельно, с делителем или без.
    Если будете это делать обратите особое внимание на назначение кнопок (своих) в операторе управления.
    Кнопки там назначаются в двух видах:
    if (HeldDown(Joystick1.Button7, var.t и var.b7HeldDown , учтите, номера кнопок (в нашем случае 7), должны совпадать.

×
×
  • Создать...