Перейти к публикации

Рекомендованные сообщения

Опубликовано:

Всем привет. Вопрос можно ли управлять мышкой в ил 2 штурмовик Blitz? А то управлять на клавиатуре просто невозможно. Напишите ответ пожалуйста

Опубликовано:
07.03.2024 в 16:10, Zxx сказал:

можно ли управлять мышкой в ил 2 штурмовик Blitz?

Нельзя. 

Не очень понятно, что эта тема делает в разделе Ил-2 1946.

Опубликовано: (изменено)
07.03.2024 в 16:10, Zxx сказал:

Всем привет. Вопрос можно ли управлять мышкой в ил 2 штурмовик Blitz? А то управлять на клавиатуре просто невозможно. Напишите ответ пожалуйста

Может пора купить джойстик и перестать мучаться играя на клавишах как тракторист? Я прошёл все стадии дурдома - клавиатура,мышеджои,геймпады (о да,в ИЛа можно играть на геймпадах от  PS4  Xbox 360,играл на них) и в итоге купил РУД+РУС и забыл про все эти мучения,чего и вам советую,один раз живем всётаки,зачем мучаться?!

Изменено пользователем trotil812
  • Поддерживаю! 1
  • 4 недели спустя...
Опубликовано: (изменено)

В этом вся и прелесть:Когда есть супер-пупер джой,все становится до безобразия пресно и просто.С мышью все по другому:Сначала проходишь все круги ада.И бьют тебя нещадно.И в сталфайте уходишь в сваливание в неподходящий момент.Но с временем замечаешь,что начинают проходить такие фишки,которые на джойстике не проходили.И точность стрельбы растет и вытягиваешь лучше на горках и тд.Оказывается под рукой лежит опасный скальпель.От тебя лишь требуется аккуратность и терпение.

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

Изменено пользователем figli
  • 2 недели спустя...
Опубликовано:

Тут вопрос может быть рассмотрен в таком аспекте: -Есть желание попробовать в авиасимулятор, но нет желания покупать хороший (а значит дорогой) джойстик, а вдруг не зайдёт? Плохой же, покупать не следует даже из любопытства. Кроме того иногда случается так, что человек находится далеко от своего рабочего места где есть и джой и педали и т.д. а полетать хочется. Вот тогда мышеджойстик достойный вариант. Вот вариант скрипта (автор не я) который закроет все потребности для полётов в Ил-2 ЗС хоть на истребителе, хоть на бомбере (с управлением турелями), обзором, при этом нужна только мышь и клавиатура. Скрипт подробно расписан, что и как назначить. Пугаться его громоздкости не надо, а надо установить GlovePIE (просто скачать и вставить нижеприведенный скрипт), а также установить PPJoy тоже не сложно (если Винда будет сопротивляться, то запустить его в тестовом режиме). Да в скрипте возможно придётся поменять разрешение экрана и поставить параметры своей мыши амплитуду движения и dpi в скрипте всё расписано. 

 

Ниже скрипт:

 


 // ============================================================
// Пример эмуляции джойстика и трекира с помощью мыши и клавиатуры
// ============================================================
// Для Ил-2 необходимо через "conf.ini" включить использование системного
// курсора (mouseUse=1), джойстика (joyUse=1) и трекира (trackIRUse=1). Обзор
// мышью нужно оставить включенным (SensitivityX=1.0 и SensitivityY=1.0), чтобы
// сохранить возможность управления турельными пулеметами при переключении на
// задних стрелков. Ил-2 автоматически отвязывает обзор от мыши (при сохранении
// мышиного управления турельными пулеметами) после каждого изменения состояния
// трекира.
//
// ...
// [rts]
// mouseUse=1
// joyUse=1
// trackIRUse=1
// ...
// [rts_mouse]
// SensitivityX=1.0
// SensitivityY=1.0
// ...
//
// Для Ил-2 в настройках управления необходимо не использовать клавиши [Q], [W],
// [E], [A], [S], [D], так как в скрипте они используются для управления
// клавотрекиром (в режиме пилотирования) и клаводжойстиком (во вспомогательном
// режиме).
//
// Для полноценного обзора с помощью клавотреикра в Ил-2 рекомендуется
// использовать следующие настройки кнопок и осей:
// - "Оружие 1+2" - кнопка [Пробел]
// - "Сменить сменить угол зрения" - кнопка [C]
// - "Смотреть через прицел. Вкл/Выкл" - кнопка [X]
// ...
// - "Элероны" - Ось X
// - "Руль высоты" - Ось Y
// - "Тяга" - Ось Z
// - "Руль высоты" - Вращение по оси Z
// - "Приближение" - Скольжение по оси U
//
// Для Ил-2 через "settings.ini" в подкаталоге "users\1\" можно совместить рули
// с соответствующими триммерами синхронно на одной оси (для бомбардировщиков
// важен только триммер руля направления на оси RZ, поскольку он позволяет
// доворачить по курсу в автогоризонте):
//
// ...
// [HotKey aircraftView]
// Space=Weapon01
// X=cockpitAim
// C=fovSwitch
// ...
// [HotKey move]
// JoystickDevice0 AXE_X=aileron
// JoystickDevice0 AXE_Y=elevator
// JoystickDevice0 AXE_Z=power
// JoystickDevice0 AXE_RZ=rudder
// JoystickDevice0 AXE_U=zoom
// AXE_X JoystickDevice0=trimaileron
// AXE_Y JoystickDevice0=trimelevator
// AXE_RZ JoystickDevice0=trimrudder
// ...
//
// ============================================================
// [F9] Режим пилотирования (клавотрекир + мышеджойстик)
// ============================================================
// При отжатой [ALT] любая мышь управляет только джойстиком
// (оси трекира сохраняют свое значение или управляются с клавиатуры)
// При зажатой [ALT] любая мышь управляет только трекиром
// (оси джойстика сохраняют свое значение, системный курсор свободен)
//
// В режиме пилотирования доступен клавотрекир, заточенный под левую руку:
// Комбинации [Q, W, E, A, S, D] - быстрый осмотр с клавиатуры (с автовозвратом)
// [SHIFT] + [Q, W, E, A, S, D] - плавный осмотр с клавиатуры (без автовозврата)
// [SHIFT] + [Q] + [E] - центровка по курсу и тангажу трекира
// Сдвиг головы в сторону поворота выполняется автоматически
//
// ============================================================
// [F10] Вспомогательный режим (клаводжойстик + мышь)
// ============================================================
// При отжатой [ALT] любая мышь управляет курсором, турельными пулеметами и т.п.
// (оси джойстика и трекира сохраняют свое значение, системный курсор свободен)
// При зажатой [ALT] любая мышь управляет только трекиром
// (оси джойстика сохраняют свое значение, системный курсор свободен)
//
// Во вспомогательном режиме доступен клаводжойстик, заточенный под левую руку:
// [A-D], [W-S], [Q-E] - быстрое дерганье элеронов, РВ и РН (с автовозвратом)
// [SHIFT] + [A-D], [W-S], [Q-E] - плавное подруливание (без автовозврата)
// [SHIFT] + [Q] + [E] - центровка элеронов, РВ и РН джойстика
//
// ============================================================
// [F11] Режим полета задом наперед (инвертированный клаводжойстик + мышь)
// ============================================================
// Данный режим полностью аналогичен вспомогательному режиму, но управление
// элеронами и рулями высоты на клаводжойстике инвертировано для удобства
// подруливания от лица заднего стрелка при полете задом как от лица пилота
// при полете вперед.
//
// ============================================================
// Управление мышеджойстиком (только в режиме пилотирования)
// ============================================================
// Оси "X Axis" (элероны) и "Z Rotation" (руль направления, РН) джойстика:
// Управляются горизонтальным движением любой мыши (при отжатой [ALT])
// При зажатой ЛКМ управляются только элероны без руля направления
// [мышь влево/вправо = РУС влево/вправо = крен влево/вправо]
// При зажатой ПКМ управляются только руля направления без элеронов
// [мышь влево/вправо = педали влево/вправо = рысканье влево/вправо]
// Центровка визуальная по горизонтальному положению курсора-крестика на экране,
// а при необходимости откалибровать оси точно по центру можно нажать [F12].
//
// Ось "Y Axis" (руль высоты, РВ) джойстика:
// Управляется вертикальным движением любой мыши (при отжатой [ALT])
// [мышь на себя = РУС на себя = увеличение угла атаки]
// Центровка визуальная по вертикальному положению курсора-крестика на экране,
// а при необходимости откалибровать оси точно по центру можно нажать [F12].
//
// Ось "Z Axis" (рычаг управления двигателем, РУД) джойстика:
// Управляется колесом прокрутки любой мыши (при отжатой ALT)
// При отжатой ПКМ управляется с шагом 5/110 (22 деления)
// При зажатой ПКМ управляется с шагом 25/110 (4-5 делений)
// Центровка РУД не нужна, в Ил-2 тяга от 0% до 110% пишется текстом
//
// ============================================================
// Управление мышетрекиром (во всех режимах при зажатой [ALT])
// ============================================================
// Ось "Yaw" (курс влево-вправо) трекира:
// Управляется горизонтальным движением мыши (при зажатой [ALT])
//
// Ось "Pitch" (тангаж вверх-вниз) трекира:
// Управляется вертикальным движением мыши (при зажатой [ALT])
//
// Ось "U"/"Slider" (скольжение) джойстика:
// Управляется колесом прокрутки любой мыши (при зажатой ALT)
// При отжатой ПКМ управляется с шагом 5/110 (22 деления)
// При зажатой ПКМ управляется с шагом 25/110 (4-5 делений)
// Центровка скольжения не нужна, если использовать эту ось для зума

// Если выполняется первая итерация скрипта (starting = 1) при запуске
// или зажата клавиша [F12] (Keyboard.F12 = 1) для калибровки центра осей,
// то инициализируем параметры скрипта и центруем оси джойстика и трекира
if ((starting = 1) or (Keyboard.F12 = 1)) then begin
    // ============================================================
    // Настраиваемые параметры, которые можно изменить по желанию
    // ============================================================

    // Указываем желаемое количество итераций в секунду
    PIE.FrameRate = 250;

    // Указываем желаемую амплитуду движения мыши (в сантиметрах по горизонтали
    // и по вертикали), которая будет соответствовать полному ходу осей
    // джойстика и трекира, а так же полному ходу скорректированной позиции
    // курсора относительно экрана при визуальной центровке осей джойстика.
    // Для повышения разрешения и точности осей джойстика и трекира необходимо
    // указать увеличенную амплитуду движения мышью (или завышенный dpi).
    var.JoystickCentimetersDX := 5.08;
    var.JoystickCentimetersDY := 2.85;
    var.TrackIRCentimetersDX := 5.08;
    var.TrackIRCentimetersDY := 2.85;

    // Указываем реальный DPI сенсора мыши (количество точек на линейный дюйм).
    // Возможные значения DPI: от 300 до 4000 (зависит от сенсора мыши).
    // Для повышения разрешения и точности осей джойстика и трекирe необходимо
    // использовать мышь с высоким dpi (или увеличить амплитуду движения мыши).
    var.DotsPerInch := 1000.0;

    // Указываем желаемое количество делений колеса прокрутки, которое будет
    // соответствовать полному ходу осей Z (РУД) и U (скольжение) джойстика.
    // Для управления тягой с шагом 5% в диапазоне от 0% до 110% необходимо
    // указать 22 деления (110% / 5%). Для повышения разрешения и точности осей
    // Z и U необходимо указать увеличенное число делений колеса прокрутки.
    var.PowerClicks := 22;
    var.ZoomClicks := 24;

    // Указываем желаемое количество секунд, которое будет соответствовать
    // полному ходу осей при управлении ими с клавиатуры в режиме плавного
    // триммирования без автовозврата.
    var.KeyDeltaTime := 2.0;

    // ============================================================
    // Вычисляемые параметры
    // ============================================================

    // Вычисляем разрешение осей джойстика и трекира
    // (2000 точек при 2-ух дюймовой амплитуде на мышке с 1000 dpi)
    var.JoystickDotsDX := (var.JoystickCentimetersDX / 2.54) * var.DotsPerInch;
    var.JoystickDotsDY := (var.JoystickCentimetersDY / 2.54) * var.DotsPerInch;
    var.TrackIRDotsDX := (var.TrackIRCentimetersDX / 2.54) * var.DotsPerInch;
    var.TrackIRDotsDY := (var.TrackIRCentimetersDY / 2.54) * var.DotsPerInch;

    // Вычисляем чувствительность мышеджойстика
    // (зависит от амплитуды движения и DPI сенсора мыши)
    var.MouseSensX := (2.0 / var.JoystickDotsDX);
    var.MouseSensY := (2.0 / var.JoystickDotsDY);
    var.MouseSensZ := (2.0 / var.PowerClicks);
    var.MouseSensZoom := (2.0 / var.ZoomClicks);

    // Вычисляем чувствительность мышетрекира
    // (зависит от амплитуды движения и DPI сенсора мыши)
    var.MouseSensYaw := (360.0 / var.TrackIRDotsDX);
    var.MouseSensPitch := (180.0 / var.TrackIRDotsDY);

    // Вычисляем чувствительность клаводжойстика за одну итерацию
    // (зависит от количества итераций в секунду)
    var.KeySensX = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensY = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensZ = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensRZ = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensZoom = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));

    // Вычисляем чувствительность клавотрекира за одну итерацию
    // (зависит от количества итераций в секунду)
    var.KeySensYaw = (360.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensPitch = (180.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));

    // Переключаемся в режим пилотирования (клавотрекир + мышеджойстик)
    var.Mode = 0;

    // Инициализируем триммирование осей джойстика
    var.TrimHorizontal := 0.0;
    var.TrimVertical := 0.0;
    var.TrimX := 0.0;
    var.TrimY := 0.0;
    var.TrimZ := 0.0;
    var.TrimRZ := 0.0;
    var.TrimZoom := 0.0;

    // Инициализируем триммирование осей трекира
    var.TrimYaw := 0.0;
    var.TrimPitch := 0.0;
    var.TrimRoll := 0.0;

    // Триммируем первые 8 осей джойстика
    PPJoy.Analog0 := var.TrimX;
    PPJoy.Analog1 := var.TrimY;
    PPJoy.Analog2 := var.TrimZ;
    PPJoy.Analog3 := var.TrimRZ;
    PPJoy.Analog4 := var.TrimZoom;
    PPJoy.Analog5 := 0.0;
    PPJoy.Analog6 := 0.0;
    PPJoy.Analog7 := 0.0;

    // Отжимаем первые 8 кнопок джойстика
    PPJoy.Digital0 := 0;
    PPJoy.Digital1 := 0;
    PPJoy.Digital2 := 0;
    PPJoy.Digital3 := 0;
    PPJoy.Digital4 := 0;
    PPJoy.Digital5 := 0;
    PPJoy.Digital6 := 0;
    PPJoy.Digital7 := 0;

    // Триммируем 6 осей трекира
    FakeTrackIR.Yaw = var.TrimYaw;
    FakeTrackIR.Pitch = var.TrimPitch;
    FakeTrackIR.Roll = var.TrimRoll;
    FakeTrackIR.X = 0.0;
    FakeTrackIR.Y = 0.0;
    FakeTrackIR.Z = 0.0;
end else begin
    // После нажатия клавиши [F9] переключаемся в режим пилотирования
    // После нажатия клавиши [F10] переключаемся во вспомогательный режим
    // После нажатия клавиши [F11] переключаемся в режим полета задом наперед
    // Клавиша может быть отжата, но режим запоминается для следующих итераций
    if (Key.F9 = 1) then var.Mode = 0;
    if (Key.F10 = 1) then var.Mode = 1;
    if (Key.F11 = 1) then var.Mode = 2;
    
    // Считываем точные изменения осей мыши через DirectInput
    // (используем RemoveUnits, чтобы единицы измерения не конвертировались)
    var.MouseDeltaX = RemoveUnits(Delta(Mouse.DirectInputX));
    var.MouseDeltaY = RemoveUnits(Delta(Mouse.DirectInputY));
    var.MouseDeltaZ = (RemoveUnits(Delta(Mouse.DirectInputZ)) / 120);
    var.MouseButton1 = RemoveUnits(Mouse.Button1);
    var.MouseButton2 = RemoveUnits(Mouse.Button2);

    // Если активен режим пилотирования и отжата клавиша [ALT],
    // то любая мышь управляет джойстиком
    if ((var.Mode = 0) and (Key.Alt = 0)) then begin
        // ============================================================
        // Эмулируем джойстик мышью (мышеджойстик)
        // ============================================================

        // Если мышь сдвинулась по горизонтали, то двигаем оси X и RZ
        // (при неподвижной мыши оси X и RZ сохранят свое значение)
        if (var.MouseDeltaX <> 0) then begin
            // Суммируем относительные сдвиги мыши по горизонтали
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimHorizontal := (var.TrimHorizontal + var.MouseSensX * var.MouseDeltaX);
            if (var.TrimHorizontal < -1.0) then var.TrimHorizontal := -1.0;
            if (var.TrimHorizontal > 1.0) then var.TrimHorizontal := 1.0;

            // Если отжата правая кнопка мыши (ПКМ),
            // то ось X мыши управляет осью X (элероны) джойстика
            // (при зажатой ПКМ элероны сохраняют свое положение)
            if (var.MouseButton2 = 0) then var.TrimX := var.TrimHorizontal;

            // Если отжата левая кнопка мыши (ЛКМ),
            // то ось X мыши управляет осью RZ (руль направления) джойстика
            // (при зажатой ЛКМ руль направления сохраняет свое положение)
            if (var.MouseButton1 = 0) then var.TrimRZ := var.TrimHorizontal;
        end;

        // Если мышь сдвинулась по вертикали, то двигаем ось Y (руль высоты)
        // (при неподвижной мыши ось Y сохранит свое значение)
        if (var.MouseDeltaY <> 0) then begin
            // Суммируем относительные сдвиги мыши по вертикали
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimVertical := (var.TrimVertical + var.MouseSensY * var.MouseDeltaY);
            if (var.TrimVertical < -1.0) then var.TrimVertical := -1.0;
            if (var.TrimVertical > 1.0) then var.TrimVertical := 1.0;

            var.TrimY := var.TrimVertical;
        end;

        // Если колесо прокрутки сдвинулось, то двигаем ось Z (РУД)
        // (при неподвижном колесе прокрутке ось Z сохранит свое значение)
        if (var.MouseDeltaZ <> 0) then begin
            // При зажатой ПКМ регулируем тягу в 5 раз быстрее
            if (var.MouseButton2 = 1) then var.MouseDeltaZ = 5.0 * var.MouseDeltaZ;

            // Суммируем относительные повороты колеса прокрутки
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimZ := (var.TrimZ + var.MouseSensZ * var.MouseDeltaZ);
            if (var.TrimZ < -1.0) then var.TrimZ := -1.0;
            if (var.TrimZ > 1.0) then var.TrimZ := 1.0;
        end;

        // ============================================================
        // Выполняем автоматический сдвиг курсора для визуальной центровки
        // ============================================================

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

        // Если мышь сдвинулась, то корректируем позицию курсора для визуальной центровки
        if ((var.MouseDeltaX <> 0) or (var.MouseDeltaY <> 0)) then begin
            // Отображаем абсолютную позицию осей джойстика из диапазона [-1..+1]
            // в абсолютную позицию курсора-крестика внутри основного экрана
            Mouse.CursorPosX := MapRange(var.TrimHorizontal, -1, 1, Screen.Left, Screen.Right);
            Mouse.CursorPosY := MapRange(var.TrimVertical, -1, 1, Screen.Top, Screen.Bottom);

            // Раскомментируйте эти строки для центровки курсора-крестика
            // внутри второго экрана (при наличии нескольких мониторов)
            //Mouse.CursorPosX := MapRange(var.TrimHorizontal, -1, 1, Screen2.Left, Screen2.Right);
            //Mouse.CursorPosY := MapRange(var.TrimVertical, -1, 1, Screen2.Top, Screen2.Bottom);

            // Раскомментируйте эти строки для центровки курсора-крестика
            // внутри расширенного рабочего стола на несколько экранов
            //Mouse.CursorPosX := MapRange(var.TrimHorizontal, -1, 1, Screen.DesktopLeft, Screen.DesktopRight);
            //Mouse.CursorPosY := MapRange(var.TrimVertical, -1, 1, Screen.DesktopTop, Screen.DesktopBottom);
        end;
    // Если в любом режиме зажата клавиша [ALT],
    // то любая мышь управляет трекиром
    end else if (Key.Alt = 1) then begin
        // ============================================================
        // Эмулируем трекир мышью (мышетрекир)
        // ============================================================

        // Если мышь сдвинулась по горизонтали, то двигаем ось Yaw (курс)
        // (при неподвижной мыши ось Yaw сохраняет свое значение)
        if (var.MouseDeltaX <> 0) then begin
            // Суммируем относительные сдвиги мыши по горизонтали
            // в масштабированное абсолютное значение в диапазоне [-180..+180]
            var.TrimYaw := (var.TrimYaw + var.MouseSensYaw * var.MouseDeltaX);
            if (var.TrimYaw < -180.0) then var.TrimYaw := (var.TrimYaw + 360.0);
            if (var.TrimYaw > 180.0) then var.TrimYaw := (var.TrimYaw - 360.0);
        end;

        // Если мышь сдвинулась по горизонтали, то двигаем ось Pitch (тангаж)
        // (при неподвижной мыши ось Pitch сохраняет свое значение)
        if (var.MouseDeltaY <> 0) then begin
            // Суммируем относительные сдвиги мыши по вертикали
            // в масштабированное абсолютное значение в диапазоне [-180..+180]
            var.TrimPitch := (var.TrimPitch - var.MouseSensPitch * var.MouseDeltaY);
            if (var.TrimPitch < -180.0) then var.TrimPitch := (var.TrimPitch + 360.0);
            if (var.TrimPitch > 180.0) then var.TrimPitch := (var.TrimPitch - 360.0);
        end;

        // Если колесо прокрутки сдвинулось, то двигаем ось U джойстика
        // (при неподвижном колесе прокрутке ось U сохраняет свое значение)
        if (var.MouseDeltaZ <> 0) then begin
            // При зажатой ПКМ регулируем ось U джойстика в 5 раз быстрее
            if (var.MouseButton2 = 1) then var.MouseDeltaZ = 5.0 * var.MouseDeltaZ;

            // Суммируем относительные сдвиги мыши по вертикали
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimZoom := (var.TrimZoom - var.MouseSensZoom * var.MouseDeltaZ);
            if (var.TrimZoom < -1.0) then var.TrimZoom := -1.0;
            if (var.TrimZoom > 1.0) then var.TrimZoom := 1.0;
        end;

        // ============================================================
        // Отключаем автоматический сдвиг курсора
        // ============================================================

        // В режиме мышетрекира (при зажатой клавише [ALT]) любая мышь управляет
        // трекиром, а оси X, Y и RZ джойстика сохраняют свое фиксированное
        // положение (которое было перед зажатием [ALT]). Корректировать позицию
        // курсора в режиме мышетрекира нет никакой надобности, пусть его
        // позиция меняется с системными настройками скорости и ускорения.

        // В режиме мышеджойстика (после отжатия клавиши [ALT]) любая мышь снова
        // начнет управлять джойстиком и снова включится визуальная центровка,
        // так что системный курсор автоматически вернется в ту позицию внутри
        // экрана, которая соответствует текущей позиции осей джойстика.
    end;

    // ============================================================
    // Режим пилотирования (клавотрекир + мышеджойстик)
    // ============================================================
    if (var.Mode = 0) then begin
        // В режиме пилотирования клаводжойстик не используется,
        // поэтому используем текущее затриммированное положение джойстика
        var.JoyX := var.TrimX;
        var.JoyY := var.TrimY;
        var.JoyZ := var.TrimZ;
        var.JoyRZ := var.TrimRZ;

        // ============================================================
        // Эмулируем трекир клавиатурой (клавотрекир)
        // ============================================================

        // Если зажата клавиша [SHIFT] на клавиатуре,
        // то плавно дублируем мышетрекир с клавиатуры (без автовозврата)
        if (Key.Shift) then begin
            // [SHIFT] + [A] - курс левее
            // [SHIFT] + [D] - курс правее
            if (Key.A) then var.TrimYaw := (var.TrimYaw - var.KeySensYaw);
            if (Key.D) then var.TrimYaw := (var.TrimYaw + var.KeySensYaw);
            if (var.TrimYaw < -180.0) then var.TrimYaw := (var.TrimYaw + 360.0);
            if (var.TrimYaw > 180.0) then var.TrimYaw := (var.TrimYaw - 360.0);

            // [SHIFT] + [W] - тангаж выше
            // [SHIFT] + [S] - тангаж ниже
            if (Key.W) then var.TrimPitch := (var.TrimPitch + var.KeySensPitch);
            if (Key.S) then var.TrimPitch := (var.TrimPitch - var.KeySensPitch);
            if (var.TrimPitch < -180.0) then var.TrimPitch := (var.TrimPitch + 360.0);
            if (var.TrimPitch > 180.0) then var.TrimPitch := (var.TrimPitch - 360.0);

            // [SHIFT] + [Q] - угол обзора шире
            // [SHIFT] + [E] - угол обзора уже
            if (Key.Q) then var.TrimZoom := (var.TrimZoom + var.KeySensZoom);
            if (Key.E) then var.TrimZoom := (var.TrimZoom - var.KeySensZoom);
            if (var.TrimZoom < -1.0) then var.TrimZoom := -1.0;
            if (var.TrimZoom > 1.0) then var.TrimZoom := 1.0;

            // [SHIFT] + [Q] + [E] - центовка по курсу и тангажу трекира
            if ((Key.Q) and (Key.E)) then begin
               var.TrimYaw := 0.0;
               var.TrimPitch := 0.0;
               var.TrimRoll := 0.0;
            end;

            // Используем текущее затриммированное положение трекира
            var.JoyU := var.TrimZoom;

            var.ViewYaw := var.TrimYaw;
            var.ViewPitch := var.TrimPitch;
            var.ViewRoll := var.TrimRoll;
        // Если отжата клавиша [SHIFT] на клавиатуре,
        // то выполняем быстрый осмотр направлений с клавиатуры (с автовозвратом)
        end else begin
            // Выполняем автовозврат в затриммированное положение трекира
            var.JoyU := var.TrimZoom;

            var.ViewYaw := var.TrimYaw;
            var.ViewPitch := var.TrimPitch;
            var.ViewRoll := var.TrimRoll;

            if (Key.W) then begin
                // [W] + [Q] + [E] - влево 0, вверх 67
                if ((Key.Q) and (Key.E)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 67.5;
                // [W] + [Q] - влево 45, вверх 45
                end else if (Key.Q) then begin
                    var.ViewYaw := -45.0;
                    var.ViewPitch := 45.0;
                // [W] + [E] - вправо 45, вверх 45
                end else if (Key.E) then begin
                    var.ViewYaw := 45.0;
                    var.ViewPitch := 45.0;
                // [W] + [A] + [D] - влево 0, вверх 90
                end else if ((Key.A) and (Key.D)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 90.0;
                // [W] + [A] - влево 180, вверх 45
                end else if (Key.A) then begin
                    var.ViewYaw := -179.0;
                    var.ViewPitch := 45.0;
                // [W] + [D] - вправо 180, вверх 45
                end else if (Key.D) then begin
                    var.ViewYaw := 179.0;
                    var.ViewPitch := 45.0;
                // [W] + [S] - влево 0, вверх 45
                end else if (Key.S) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 45.0;
                // [W] - вправо 0, вверх 90
                end else begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 90.0;
                end;
            end else if (Key.S) then begin
                // [S] + [Q] + [E] - влево 0, вверх 0
                if ((Key.Q) and (Key.E)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 0.0;
                // [S] + [Q] - влево 22, вверх 45
                end else if (Key.Q) then begin
                    var.ViewYaw := -22.5;
                    var.ViewPitch := 45.0;
                // [S] + [E] - вправо 22, вверх 45
                end else if (Key.E) then begin
                    var.ViewYaw := 22.5;
                    var.ViewPitch := 45.0;
                // [S] + [A] + [D] - влево 0, вниз 22
                end else if ((Key.A) and (Key.D)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := -22.5;
                // [S] + [A] - влево 90, вверх 0
                end else if (Key.A) then begin
                    var.ViewYaw := -90.0;
                    var.ViewPitch := 0.0;
                // [S] + [D] - вправо 90, вверх 0
                end else if (Key.D) then begin
                    var.ViewYaw := 90.0;
                    var.ViewPitch := 0.0;
                // [S] - вправо 0, вверх 22
                end else begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 22.5;
                end;
            // [Q] + [E] - влево 0, вверх 67
            end else if ((Key.Q) and (Key.E)) then begin
                var.ViewYaw := 0.0;
                var.ViewPitch := 22.0;
            // [A] + [D] - влево 0, вверх 0
            end else if ((Key.A) and (Key.D)) then begin
                var.ViewYaw := 0.0;
                var.ViewPitch := 0.0;
            end else if (Key.A) then begin
                // [A] + [E] - влево 90, вверх 45
                if (Key.E) then begin
                    var.ViewYaw := -90.0;
                    var.ViewPitch := 45.0;
                // [A] - влево 180, вверх 0
                end else begin
                    var.ViewYaw := -179.0;
                    var.ViewPitch := 0.0;
                end;
            end else if (Key.D) then begin
                // [D] + [Q] - вправо 90, вверх 45
                if (Key.Q) then begin
                    var.ViewYaw := 90.0;
                    var.ViewPitch := 45.0;
                // [D] - вправо 180, вверх 0
                end else begin
                    var.ViewYaw := 179.0;
                    var.ViewPitch := 0.0;
                end;
            // [Q] - влево 90, вверх 22
            end else if (Key.Q) then begin
                var.ViewYaw := -90.0;
                var.ViewPitch := 22.5;
            // [E] - вправо 90, вверх 22
            end else if (Key.E) then begin
                var.ViewYaw := 90.0;
                var.ViewPitch := 22.5;
            end;
        end;   
    // ============================================================
    // Вспомогательный режим (клаводжойстик + мышь)
    // ============================================================
    end else begin
        // Во вспомогательном режиме клавотрекир не используется,
        // поэтому используем текущее затриммированное положение трекира
        var.JoyU := var.TrimZoom;

        var.ViewYaw := var.TrimYaw;
        var.ViewPitch := var.TrimPitch;
        var.ViewRoll := var.TrimRoll;

        // ============================================================
        // Эмулируем джойстик клавиатурой (клаводжойстик)
        // ============================================================

        // В режиме полета задом наперед инвертируем управление элеронами и РВ
        var.ScaleXY = 1.0;
        if (var.Mode = 2) then var.ScaleXY = -1.0;

        // Если зажата клавиша [SHIFT] на клавиатуре,
        // то плавно дублируем мышеджойстик с клавиатуры (без автовозврата)
        if (Key.Shift) then begin
            // [SHIFT] + [A] - крен левее
            // [SHIFT] + [D] - крен правее
            if (Key.A) then var.TrimX := var.TrimX - var.KeySensX * var.ScaleXY;
            if (Key.D) then var.TrimX := var.TrimX + var.KeySensX * var.ScaleXY;
            if (var.TrimX < -1.0) then var.TrimX = -1.0;
            if (var.TrimX > 1.0) then var.TrimX = 1.0;

            // [SHIFT] + [W] - тангаж ниже
            // [SHIFT] + [S] - тангаж выше
            if (Key.W) then var.TrimY := var.TrimY - var.KeySensY * var.ScaleXY;
            if (Key.S) then var.TrimY := var.TrimY + var.KeySensY * var.ScaleXY;
            if (var.TrimY < -1.0) then var.TrimY = -1.0;
            if (var.TrimY > 1.0) then var.TrimY = 1.0;

            // [SHIFT] + [Q] - рысканье левее
            // [SHIFT] + [E] - рысканье правее
            if (Key.Q) then var.TrimRZ := var.TrimRZ - var.KeySensRZ;
            if (Key.E) then var.TrimRZ := var.TrimRZ + var.KeySensRZ;
            if (var.TrimRZ < -1.0) then var.TrimRZ = -1.0;
            if (var.TrimRZ > 1.0) then var.TrimRZ = 1.0;

            // [SHIFT] + [Q] + [E] - центовка элеронов, РВ и РН
            if ((Key.Q) and (Key.E)) then begin
               var.TrimX := 0.0;
               var.TrimY := 0.0;
               var.TrimRZ := 0.0;
            end;

            // Используем текущее затриммированное положение джойстика
            var.JoyX := var.TrimX;
            var.JoyY := var.TrimY;
            var.JoyZ := var.TrimZ;
            var.JoyRZ := var.TrimRZ;
        // Если отжата клавиша [SHIFT] на клавиатуре,
        // то выполняем быстрое дерганье осей джойстика (с автовозвратом)
        end else begin
            // Выполняем автовозврат в затриммированное положение джойстика
            var.JoyX := var.TrimX;
            var.JoyY := var.TrimY;
            var.JoyZ := var.TrimZ;
            var.JoyRZ := var.TrimRZ;

            // [A] - крен влево
            // [D] - крен вправо
            if (Key.A) then var.JoyX := -1.0 * var.ScaleXY;
            if (Key.D) then var.JoyX := 1.0 * var.ScaleXY;

            // [W] - тангаж вниз
            // [S] - тангаж вверх
            if (Key.W) then var.JoyY := -1.0 * var.ScaleXY;
            if (Key.S) then var.JoyY := 1.0 * var.ScaleXY;

            // [Q] - рысканье влево
            // [E] - рысканье влево
            if (Key.Q) then var.JoyRZ := -1.0;
            if (Key.E) then var.JoyRZ:= 1.0;
        end;
    end;

    // ============================================================
    // Добавляем автоматический сдвиг головы в сторону поворота
    // ============================================================

    // Сдвигаемся влево-вверх-вперед при выглядывании влево
    if (var.ViewYaw < -30.0) then begin
        var.ViewShift := MapRange(var.ViewYaw, -30, -180, 0, -1);
        var.ViewHeight := MapRange(var.ViewYaw, -30, -180, 0, 1);
        var.ViewDist := MapRange(var.ViewYaw, -30, -180, 0, 1);
    // Сдвигаемся вправо-вверх-вперед при выглядывании вправо
    end else if (var.ViewYaw > 30.0) then begin
        var.ViewShift := MapRange(var.ViewYaw, 30, 180, 0, 1);
        var.ViewHeight := MapRange(var.ViewYaw, 30, 180, 0, 1);
        var.ViewDist := MapRange(var.ViewYaw, 30, 180, 0, 1);
    // Сдвигаемся вниз-вперед при заглядывании под прицел
    end else if (var.ViewPitch < -10.0) then begin
        var.ViewShift := 0.0;
        var.ViewHeight := MapRange(var.ViewPitch, -10, -30, 0, -1);
        var.ViewDist := MapRange(var.ViewPitch, -10, -30, 0, 1);
    // Сдвигаемся вверх-вперед при выглядывании над прицелом
    end else if (var.ViewPitch > 10.0) then begin
        var.ViewShift := 0.0;
        var.ViewHeight := MapRange(var.ViewPitch, 10, 30, 0, 1);
        var.ViewDist := MapRange(var.ViewPitch, 10, 30, 0, 1);
    // Сдвигаемся по центру при взгляде на прицел
    end else begin
        var.ViewShift := 0.0;
        var.ViewHeight := 0.0;
        var.ViewDist := 0.0;
    end;

    // ============================================================
    // Обновляем состояние джойстика
    // ============================================================

    // Переводим в новое положение первые 5 осей джойстика PPJoy1:
    // X (элероны), Y (РВ), Z (РУД), RZ (РН), U (скольжение)
    PPJoy1.Analog0 := var.JoyX;
    PPJoy1.Analog1 := var.JoyY;
    PPJoy1.Analog2 := var.JoyZ;
    PPJoy1.Analog3 := var.JoyRZ;
    PPJoy1.Analog4 := var.JoyU;

    // ============================================================
    // Обновляем состояние трекира
    // ============================================================

    // Переводим оси поворота трекира в новое положение за одну итерацию
    // (точное позиционирование без задержек на сглаженное сведение)
    FakeTrackIR.Yaw := var.ViewYaw;
    FakeTrackIR.Pitch := var.ViewPitch;

    // Ил-2 кратковременно (буквально на секунду) отвязывает обзор от мыши
    // (при сохранении мышиного управления турельными пулеметами) после каждого
    // изменения состояния трекира, поэтому при постоянном обновлении состояния
    // трекира можно отвязать обзор от мыши (сохранив управление турелями).

    // Выполняем ненулевые микроизменения оси Roll около нулевого значения,
    // чтобы эмулятор трекира постоянно обновлял состояние трекира даже при
    // визуально неизменной позиции всех осей
    if (FakeTrackIR.Roll < var.ViewRoll) then begin
        FakeTrackIR.Roll := var.ViewRoll + 0.000001;
    end else begin
        FakeTrackIR.Roll := var.ViewRoll - 0.000001;
    end;

    // Переводим оси сдвига трекира в новое положение за несколько итераций
    // (плавный сдвиг, чтобы избежать заглючивания в промежуточном положении)
    FakeTrackIR.X := (FakeTrackIR.X + 0.2 * (var.ViewShift - FakeTrackIR.X));
    FakeTrackIR.Y := (FakeTrackIR.Y + 0.2 * (var.ViewHeight - FakeTrackIR.Y));
    FakeTrackIR.Z := (FakeTrackIR.Z + 0.2 * (var.ViewDist - FakeTrackIR.Z));
end;

  • Спасибо! 1
  • ХА-ХА 1
Опубликовано:

         Граждане мышеводы активно вербуют потенциальных вирпилов в свою секту извращенцев), предлагая сменить нормальную ориентацию человека, стремящегося, хотя бы в компьютере насладиться полетом, и частично почувствовать себя на месте пилота ЛА, на задрота тыкающего мышкой, елозящей по столу. Отговорки про "хороший" и "плохой" джойстик - это не более, чем попытка самооправдания, своей лени натренировать осознанное управление ЛА, на режимах, позволяющих одержать победу в виртуальной схватке. При этом скучно осознавать себя маргиналом променявшего весь смысл данного жанра, на убогую замену нормального, аутентичного способа управления ЛА. Напоминает наркош, стремящихся вовлечь в свой порочный круг новых адептов.

         Нью вирпилам же хочу пожелать любознательности, трудолюбия, увлеченности и последовательности, в освоении любого в хорошем смысле слова авиасимулятора. Нет волшебных скриптов, или супердорогих девайсов, которые позволят овладеть виртуальным ЛА на продвинутом уровне. Только собственные мозги и упорство. Избавьте себя от соблазнов гуру "доброхотов", которые делятся с вами "секретам" своего якобы успеха. Это ущербность, стремящаяся одеть себя в приличное платье, чтобы скрыть свою уродливую суть. Тем самым лишая людей радости освоения аутентичных органов управления самолетом, так и радости усовершенствования и конструирования оных.

  • Поддерживаю! 1
Опубликовано:

Анекдот, может несколько богохульственный, но тем не менее: Собралась толпа побить камнями блудницу, тут выходит Иисус и говорит: - Кто сам без греха, пусть бросит в неё камень! Из толпы выходит пожилая женщина и бросает камень, Иисус: Мама! Ну сколько можно просить, сидите дома и не мешайте работать!

Саня привет! Ты прочитал текст в свою сторону, лично я считаю, что джойстик (желательно хороший) который не колбасит и который живёт долго, более подходящий инструмент для полёта чем мышь, особенно для воздушного боя. В противном случае вся современная авиация летала бы на мышах. Но вопрос то стоял о приобщении людей к симу через мышеджой, как наиболее простой и доступны инструмент, всего то на всего. Если человеку понравиться, то потом будет и нормальный джой, и как показывает практика, педали, и устройства обзора. Да и в отрыве от домашнего кокпита или в случае поломки, иметь что то в запасе, не помешает. Разговоры о преимуществе мышеджоев от лукавого, о дешевизне, да, но о каком преимуществе может идти речь например в сталлфайте на нулях, где вся моторика на инстинктах, у а мышеджоя нет опорной точки вокруг которой строятся эти движения? Бум зум и догонялки - убегалки его стихия, ну может повиражить ещё. Но летать то попробовать на нём лучше чем на клаве. С этим тоже согласен:

Цитата

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

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

_Х_

 

 

  • Поддерживаю! 1
Опубликовано:

             Паша привет. Извини, не узнал, дай бог, чтобы это было к прибавлению твоего бюджета. Рад что ты в добром здравии.

             Если человек освоит мышь - на джой он не перейдет, с вероятностью на мой взгляд 80-90 процентов. Причины: ему жаль будет по сути впустую потраченного времени, на более менее приличное освоение мыши; ему будет морально дискомфортно быть в шкуре новичка, осваивающего джойстик, которого окучивают все кому не лень, не все могут выдержать это; уверенность, в мифическом превосходстве мыши над джоем; отсутствия желания глубоко погружаться в тему, когда можно пойти по легкому пути, сделать пиу-пиу, как в любой банальной стрелялке.

             Оправдание использования мыши финансовой несостоятельностью того или иного человека, в наше время не актуально. Это было бы справедливо, в начале 2000-х, но не сейчас, когда на рынке есть любые джойстики, крупносерийные, мелкосерийные, самоделки кустарей одиночек, рецепты самостоятельного изготовления, на любой вкус и бюджет. Чтобы получить первоначальные навыки, неофиту достаточно на авито купить даже б\у джой в приличном состоянии, для кобры, или 16000 -цена вопроса 2-3 тыс. рублей. Цена той же мыши. 

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

  • Спасибо! 1
Опубликовано:
20.04.2024 в 13:09, =BW=777 сказал:

 Если человек освоит мышь - на джой он не перейдет, с вероятностью на мой взгляд 80-90 процентов. Причины: ему жаль будет по сути впустую потраченного времени, на более менее приличное освоение мыши; ему будет морально дискомфортно быть в шкуре новичка, осваивающего джойстик, которого окучивают все кому не лень, не все могут выдержать это; уверенность, в мифическом превосходстве мыши над джоем; отсутствия желания глубоко погружаться в тему, когда можно пойти по легкому пути, сделать пиу-пиу, как в любой банальной стрелялке.

А вот этот аспект мне как то в голову не пришёл, а ведь действительно, по собственному опыту так и есть. Я то летать начинал на джойстике,( да и продолжаю), но мышеджой осваивал из любопытства, ну и для того, что бы не было по принципу: "Не читал, но осуждаю". Так вот у меня для того, что бы приблизиться к уровню пилотирования в воздушном бою как на джойстике, на мышке ушло лет пять. И это уже при том, что я далеко не был новичком. Мышь в это плане реально сложнее и что ещё интересно, если на джойстике не полетать с полгода, то максимум за три часа навык восстанавливается, на мышке это уже дня три, что бы уверенно себя чувствовать.  Джой от Дениса даёт точность при прицеливании ничуть ни хуже, да и естественность движений не мало значит, но мышеджой в запасе есть.

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Создать...