figli Опубликовано: 5 апреля 2024 Опубликовано: 5 апреля 2024 Имею огромное колличество скриптов.Сразу скажу,что нуб в грамотном их составлении.Просто иногда получается сделать некий симбиоз для своих нужд. Последняя задумка сделать педали из двух кнопок и бросить их под ноги. В таком простеньком скипте можно назначить все: а именно п.3: ускорение движения оси п.4: макс. скорость движения оси п.5: начальная скорость движения оси нехватает только центрирования самой оси.Какие прописать значения,чтобы был сброс в ноль при опускании. скриптик: // п.3: ускорение движения оси // п.4: макс. скорость движения оси // п.5: начальная скорость движения оси if HeldDown (keyboard.dot, 0) then begin PPJoy3.Analog1 = PPJoy3.Analog1 - var.incr0 var.incr0 = EnsureRange (var.incr0 + 0.02, 0, 0.1) end else var.incr0 = 0.01 if HeldDown (keyboard.comma, 0) then begin PPJoy3.Analog1 = PPJoy3.Analog1 + var.incr1 // -п.3- -п.4- var.incr1 = EnsureRange (var.incr1 + 0.02, 0, 0.1) // -п.5- end else var.incr1 = 0.01 if pressed (keyboard.Down) then PPjoy3.Analog2 = 0 https://youtu.be/ykxgAvU554w
gfdtk62 Опубликовано: 15 апреля 2024 Опубликовано: 15 апреля 2024 if Key.Comma = false and Key.Dot = false { PPJoy3.analog1 = 0 } или в вашем стиле (хотя и мой будет работать при прямом копировании): if (keyboard.comma = false and keyboard.dot = false) begin PPJoy3.analog1 = 0 end Cие добавить в конце скрипта. 1
figli Опубликовано: 15 апреля 2024 Автор Опубликовано: 15 апреля 2024 (изменено) Да заработало! Оба варианта.С возвратом оси в центр.Маленький скриптик,а такой нужный.Сп! Изменено 15 апреля 2024 пользователем figli 1
gfdtk62 Опубликовано: 17 апреля 2024 Опубликовано: 17 апреля 2024 Протестировал ваш скрипт, нашёл неудобство, невозможно использовать фиксированное отклонение руля (триммирование), а также то, что руль стремится к крайним положениям, т.е. не возможно дозировать его отклонение. Поправил, теперь центровка при одновременном нажатии двух клавиш, что кстати сокращает время перекладки руля от борта до борта. Значит шаг итерации можно уменьшить для большей точности. Для компенсации возможного отклонения руля от нейтрали при неодновременном отпускании кнопок, введена временная задержка wait (100 ms) с повторной установкой руля в нейтральное положение. if HeldDown (Key.Comma, 0) { PPJoy3.Analog1 = PPJoy3.Analog1 - var.incr0 var.incr0 = EnsureRange (var.incr0 + 0.02, 0, 0.1) } else var.incr0 = 0.01 if HeldDown (Key.Dot, 0) { PPJoy3.Analog1 = PPJoy3.Analog1 + var.incr1 var.incr1 = EnsureRange (var.incr1 + 0.02, 0, 0.1) } else var.incr1 = 0.01 if Key.Comma + Key.Dot == 1 { PPJoy3.Analog1 = 0 wait (100 ms) PPJoy3.Analog1 = 0 } 1
figli Опубликовано: 18 апреля 2024 Автор Опубликовано: 18 апреля 2024 (изменено) Тот вариант,который искал и думал,что будет удобным(при отпускании центрируется)на практике оказался для оси Z (рудер) сомнительным и менее подходящим. С этим (при нажатии двух клавиш одновременно,центрируется) будет поинтересней.Но все равно лучшее ему применение будет дя триммеров.у меня для нейтрали в этом скрипте была назначена третья кнопка slash: if pressed (keyboard.slash) then PPjoy3.Analog1 = 0 Спасибо.В доработанном Вами скрипте в ней отпала необходимость. Вот думаю: А не замахнутся ли мне,и не попросить поправить мой основной скрипт на котором летаю. У меня на одной оси X прописаны оси X и Z . А хотелось бы,чтобы все так и работало,но при зажатой ПКМ отключались элероны и работали только РВ и РН. а при отжатой ПКМ все возвращалось как было За рус отвечает Mouse2 за обзор и газ Mouse1. Вот этот,довольно известный, скрипт: //CODE // Тумблер F9 //Вкл/Выкл джоя if (F9 = false) then var.f=0 if (F9 = true and var.off = 0 and var.f=0) { var.off = 1 var.f=1 elseif (F9 = true and var.off = 1 and var.f=0) { var.off = 0 var.f=1 } } if var.off =0 { // ######## Опрос мышек НАЧАЛО ####### // ############ Mouse1 ####################### if (Mouse1.present) { if (var.Mouse1_in = false) { // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Входные параметры: var.mouse1xrange = 800 // граница движения мыши по оси X, точки на дюйм (DPI) if (mouse1.DirectInputX + var.mouse1x) < -var.mouse1xrange then var.mouse1x = -var.mouse1xrange - mouse1.DirectInputX // условия, ограничивающие движение мыши if (mouse1.DirectInputX + var.mouse1x) > var.mouse1xrange then var.mouse1x = var.mouse1xrange - mouse1.DirectInputX FakeTrackIR.yaw = ensureMapRange(mouse1.DirectInputX + var.mouse1x, -var.mouse1xrange, var.mouse1xrange, -179, 179) FakeTrackIR.x = ensureMapRange(mouse1.DirectInputX + var.mouse1x, -var.mouse1xrange, var.mouse1xrange, -1, 1) FakeTrackIR.roll = ensureMapRange(mouse1.DirectInputX + var.mouse1x, -var.mouse1xrange, var.mouse1xrange, -30, 30) var.mouse1yrange = 800 // то же самое по оси Y if (mouse1.DirectInputY + var.mouse1y) < -var.mouse1yrange then var.mouse1y = -var.mouse1yrange - mouse1.DirectInputY if (mouse1.DirectInputY + var.mouse1y) > var.mouse1yrange then var.mouse1y = var.mouse1yrange - mouse1.DirectInputY var.Mouse1_mapZ = var.Mouse1_Wheel*200 var.Mouse1_Wheel = 11 //На сколько щелчков колеса мыши разбить ось джойстика var.Mouse1_deltaz = Delta(Mouse1.DirectInputZ) var.Mouse1_Z = var.Mouse1_Z + (var.Mouse1_deltaz) if var.Mouse1_Z < 0 then var.Mouse1_Z = 0 if var.Mouse1_Z > var.Mouse1_mapZ then var.Mouse1_Z = var.Mouse1_mapZ Var.Mouse1_JZ = MapRange(var.Mouse1_Z, 0, var.Mouse1_mapZ, -1 ,1) FakeTrackIR.pitch = -ensureMapRange(mouse1.DirectInputY + var.mouse1y, -var.mouse1yrange, var.mouse1yrange, -100, 120) } else { FakeTrackIR.yaw = 0 FakeTrackIR.pitch = 0 FakeTrackIR.roll = 0 } // ########## MOUSE2 ####################### if (Mouse2.present) { if (var.Mouse2_in = false) { // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Входные параметры: var.Mouse2_mapX = 1920 //Разрешение оси X, подбирается индивидуально var.Mouse2_mapY = 1080 //Разрешение оси Y подбирается индивидуально var.Mouse2_Wheel = 16//На сколько щелчков колеса мыши разбить ось джойстика var.Mouse2_mapZ = var.Mouse2_Wheel*120 var.Mouse2_X = var.Mouse2_mapX/2 var.Mouse2_Y = var.Mouse2_mapY/2 var.Mouse2_Z = var.Mouse2_mapZ/2 var.Mouse2_in = true } var.Mouse2_deltax = Delta(Mouse2.DirectInputX) var.Mouse2_deltay = Delta(Mouse2.DirectInputY) var.Mouse2_deltaz = Delta(Mouse2.DirectInputZ) // собственно координаты мыши var.Mouse2_X = var.Mouse2_X + (var.Mouse2_deltax) var.Mouse2_Y = var.Mouse2_Y + (var.Mouse2_deltay) var.Mouse2_Z = var.Mouse2_Z + (var.Mouse2_deltaz) if var.Mouse2_X < 0 then var.Mouse2_X = 0 if var.Mouse2_X > var.Mouse2_mapX then var.Mouse2_X = var.Mouse2_mapX if var.Mouse2_Y < 0 then var.Mouse2_Y = 0 if var.Mouse2_Y > var.Mouse2_mapY then var.Mouse2_Y = var.Mouse2_mapY if var.Mouse2_Z < 0 then var.Mouse2_Z = 0 if var.Mouse2_Z > var.Mouse2_mapZ then var.Mouse2_Z = var.Mouse2_mapZ Var.Mouse2_JX = MapRange(var.Mouse2_X, 0, var.Mouse2_mapX, -1 ,1) Var.Mouse2_JY = MapRange(var.Mouse2_Y, 0, var.Mouse2_mapY, -1 ,1) Var.Mouse2_JZ = MapRange(var.Mouse2_Z, 0, var.Mouse2_mapZ, -1 ,1) } //Опрос мышек КОНЕЦ ########### //################### Подменяем оси джойстика на оси мыши ####### // Первый джойстик - управление самолетом PPJoy1.analog0 = Var.Mouse2_JX // Ось Х PPJoy1.analog1 = Var.Mouse2_JY // Ось У PPJoy1.analog2 = Var.Mouse1_JZ PPJoy1.analog3 = Var.Mouse2_JX PPJoy1.analog4 = Var.Mouse1_JZ PPJoy1.analog5 = Var.Mouse1_JZ PPJoy1.analog6 = Var.Mouse1_JZ } } //################ Подменяем кнопки джойстика кнопками нужной мыши ##### PPJoy1.Digital0 = Mouse1.LeftButton PPJoy1.Digital1 = Mouse1.RightButton PPJoy1.Digital2 = Mouse1.MiddleButton PPJoy1.Digital3 = Mouse2.LeftButton PPJoy1.Digital4 = Mouse2.RightButton // Центрирование осей if Mouse2.MiddleButton = true { //Если нажата кнопка колеса Mouse1 - Эти оси центрируются var.Mouse2_X = var.Mouse2_mapX/2 var.Mouse2_Y = var.Mouse2_mapY/2 } }// Type your script here, or click the GUI tab to autogenerate it! Изменено 18 апреля 2024 пользователем figli
gfdtk62 Опубликовано: 18 апреля 2024 Опубликовано: 18 апреля 2024 //################### Подменяем оси джойстика на оси мыши ####### // Первый джойстик - управление самолетом PPJoy1.analog0 = Var.Mouse2_JX // Ось Х PPJoy1.analog1 = Var.Mouse2_JY // Ось У PPJoy1.analog2 = Var.Mouse1_JZ PPJoy1.analog4 = Var.Mouse1_JZ PPJoy1.analog5 = Var.Mouse1_JZ PPJoy1.analog6 = Var.Mouse1_JZ } } if Mouse2.Button2 == 1 { PPJoy1.analog3 = 0 }else{ PPJoy1.analog3 = Var.Mouse2_JX } } Замените свою часть скрипта на эту. Тяжеловатый стиль написания (не красивый), без упрёка, понимаю, что не ваш, и функционал слабоват, тут можно всякого разного напихать. Может сподобит меня, выложу, что то из своего. Маленько перепутал с осями, надо так: //################### Подменяем оси джойстика на оси мыши ####### // Первый джойстик - управление самолетом PPJoy1.analog1 = Var.Mouse2_JY // Ось У PPJoy1.analog2 = Var.Mouse1_JZ PPJoy1.analog3 = Var.Mouse2_JX // Ось Z PPJoy1.analog4 = Var.Mouse1_JZ PPJoy1.analog5 = Var.Mouse1_JZ PPJoy1.analog6 = Var.Mouse1_JZ } } if Mouse2.Button2 == 1 { PPJoy1.analog0 = 0 }else{ PPJoy1.analog0 = Var.Mouse2_JX // Ось X } }
gfdtk62 Опубликовано: 18 апреля 2024 Опубликовано: 18 апреля 2024 Правда при таком способе управления, правильного скольжения не будет, самолёт будет крениться в сторону отклонение РН, надо вводить автоматическое управление элеронами в обратную сторону с некоторым коэффициентом, например так: //################### Подменяем оси джойстика на оси мыши ####### // Первый джойстик - управление самолетом PPJoy1.analog1 = Var.Mouse2_JY // Ось У PPJoy1.analog2 = Var.Mouse1_JZ PPJoy1.analog3 = Var.Mouse2_JX // Ось Z PPJoy1.analog4 = Var.Mouse1_JZ PPJoy1.analog5 = Var.Mouse1_JZ PPJoy1.analog6 = Var.Mouse1_JZ } } if Mouse2.Button2 == 1 { PPJoy1.analog0 = - Var.Mouse2_JX * 0.01 // 0.01 это коэф его конкретно подогнать опытным путём }else{ PPJoy1.analog0 = Var.Mouse2_JX // Ось X } } 1
figli Опубликовано: 18 апреля 2024 Автор Опубликовано: 18 апреля 2024 Премного благодарен!! Работает!!Принцип понятен.Можно поиграться с коэффициентом или назначить уже на ЛКМ чтобы элероны шли в противоход РН. 1
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас