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

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

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

Имею огромное колличество скриптов.Сразу скажу,что нуб в грамотном их составлении.Просто иногда получается сделать некий симбиоз для своих нужд.
Последняя задумка сделать педали из двух кнопок и бросить их под ноги.
В таком простеньком скипте можно назначить все:
а именно
п.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

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

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
  • Спасибо! 1
Опубликовано:

Протестировал ваш скрипт, нашёл неудобство, невозможно использовать фиксированное отклонение руля (триммирование), а также то, что руль стремится к крайним положениям, т.е. не возможно дозировать его отклонение. Поправил, теперь центровка при одновременном нажатии двух клавиш, что кстати сокращает время  перекладки руля от борта до борта. Значит шаг итерации можно уменьшить для большей точности. Для компенсации возможного отклонения руля от нейтрали при неодновременном отпускании кнопок, введена временная задержка  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
Опубликовано: (изменено)

Тот вариант,который искал и думал,что будет удобным(при отпускании  центрируется)на практике оказался для оси 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!

 

Изменено пользователем figli
Опубликовано:

 //################### Подменяем оси джойстика на оси мыши #######
 // Первый джойстик - управление самолетом
 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
 }
 }

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

Правда при таком способе управления, правильного скольжения не будет, самолёт будет крениться в сторону отклонение РН, надо вводить автоматическое управление элеронами в обратную сторону с некоторым коэффициентом, например так:

 

 //################### Подменяем оси джойстика на оси мыши #######
 // Первый джойстик - управление самолетом
 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
Опубликовано:

Премного благодарен!! Работает!!Принцип понятен.Можно поиграться с коэффициентом или  назначить уже на  ЛКМ чтобы элероны шли в противоход РН.

  • Спасибо! 1

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

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

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

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

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

Войти

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

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