Перейти к содержимому


- - - - -

Продвинутое применение мыши в LFS


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 51

#31 timurrrr

timurrrr

    Меня тут нет.

  • IVRT IVRT
  • PipPipPipPipPipPipPipPipPipPipPip
  • 2 144 сообщений
  • Откуда:Москва
  • Контроллер:Logitech G25
  • LFS-статус:S2 Licensed
  • LFS account:timurrrr

Отправлено 21 Май 2009 - 19:02

Набери в "поиске" слово "педали"...
  • 0
Я тут в последнее время особо не появляюсь; пишите в google talk, ежли что.
И это, свистните когда Scirocco таки выйдет? :)

#32 Пробегавший мимо Aleg...

Пробегавший мимо Aleg...
  • ____

Отправлено 21 Май 2009 - 19:47

ильдар, в этой теме есть ответ на этот вопрос. Ответ простой - МОЖНО. Более того, когда мне лень ставить руль на стол и хочется поездить, я рулю мышой, а педалирую педалями, которые всегда лежат у меня под столом. Ставь Mouse Joystick и пользуйся, при условии что педали подключены к геймпорту. Если у педалей свой USB контроллер, то и мышеджойстик не нужен. Все становится самодостаточным.
Отмечу только, что все педали будь то от МОМО, DFP или G25, можно подключить к аппаратному геймпорту безо всяких проблем.

Сообщение отредактировал Aleg: 21 Май 2009 - 19:50

  • 0

#33 Пробегавший мимо ильдар...

Пробегавший мимо ильдар...
  • ____

Отправлено 21 Май 2009 - 22:03

Извините не стал читать всю тему ибо времени нет(((

Спасибо за ответ!

Сообщение отредактировал ильдар: 21 Май 2009 - 22:05

  • 0

#34 Пробегавший мимо Lion HC...

Пробегавший мимо Lion HC...
  • ____

Отправлено 15 Июнь 2009 - 01:19

Подключил я наконец, как хотел, две мыши.
Воспользовался JMouse...
1. На первой PS/2 мыши отключил функции указателя специальным сочетанием клавиш (при нажатой левой КМ, трижды нажать правую КМ). Пользуюсь ею только как джойстиком.
2. На второй захотел отключить управление джойстиком. Чтобы пользоваться только как мышью. К сожалению, с родным софтом не разобрался. Но залез в реестр Виндовз и вручную отключил фильтр джойстика...

Пробовал я и PPJoy c PIE - вещь хорошая! Но я так понимаю, она не может заблокировать перетаскивание курсора...

С PS/2 мыши я сделал руль, который вращается на 900 градусов. Впечутления почти как в реальном авто. Правда ограничителя по краях я не сделал и наверное делать не буду. Но при выходе за пределы диапазона смещается центр калибровки оси. Хотя сильно за пределы я не выхожу, но каждый раз на несколько точек центр смещается.
Возник такой вопрос:
Можно ли в JMouse както предотвратить смещение центра оси, при незначительном выходе за пределы???

В PIE такой проблемы нет. Там, даже если покрутить руль на 6 оборотов(вместо 2,5), все-равно центр оси не собьется.

У кого какие соображения???
П.С.: а может JMouse - опенсорс? Я б немножко его подшаманил /smile.gif' class='bbc_emoticon' alt=':)' />
  • 0

#35 Пробегавший мимо repeat...

Пробегавший мимо repeat...
  • ____

Отправлено 15 Июнь 2009 - 06:15

в гловПи 0.30 можно так заблочить перетаскивание мыши
mouse.SwallowMovement =true
  • 0

#36 Пробегавший мимо Lion HC...

Пробегавший мимо Lion HC...
  • ____

Отправлено 15 Июнь 2009 - 16:27

в гловПи 0.30 можно так заблочить перетаскивание мыши
mouse.SwallowMovement =true

Спасибо! Работает. Но блокирует сразу две мыши.
Что бы не вводил:
mouse.SwallowMovement =true
или
mouse1.SwallowMovement =true
или
mouse2.SwallowMovement =true

Как заблокировать только первую?
  • 0

#37 Пробегавший мимо repeat...

Пробегавший мимо repeat...
  • ____

Отправлено 15 Июнь 2009 - 17:36

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

похожа то нету. можешь зайти во вкладку GUI и там Detect Output to Emulate

Сообщение отредактировал repeat: 15 Июнь 2009 - 17:41

  • 0

#38 Пробегавший мимо Lion HC...

Пробегавший мимо Lion HC...
  • ____

Отправлено 15 Июнь 2009 - 23:17

Спасибо! Работает. Но блокирует сразу две мыши.
...
Как заблокировать только первую?

Вот так работает:

mouse.Swallow = true
mouse.DirectInputX = mouse.DirectInputX + Delta(mouse2.DirectInputX)
mouse.DirectInputY = mouse.DirectInputY + Delta(mouse2.DirectInputY)
mouse.LeftButton = mouse2.LeftButton
mouse.RightButton = mouse2.RightButton
mouse.MiddleButton = mouse2.MiddleButton


Правда, курсор ели-заметно притормажывает. Но вполне можно пользоваться /smile.gif' class='bbc_emoticon' alt=':)' />
  • 0

#39 Пробегавший мимо repeat...

Пробегавший мимо repeat...
  • ____

Отправлено 15 Июнь 2009 - 23:39

обновление гловпия увеличь
PIE.FrameRate = 200
может поможет
  • 0

#40 ivanzoid

ivanzoid

    Мимо проходил..

  • На квалификации
  • 9 сообщений
  • Откуда:Омск
  • Контроллер:мышь
  • LFS-статус:S2 Licensed
  • LFS account:ivanzoid

Отправлено 09 Июль 2009 - 12:54

Приподнему тему.
Большое спасибо за упоминание программы GlovePIE!

Вообще, оказывается GlovePIE + PPJoystick - это очень мощная связка. Мощнее и JMouse и PPJoy'а в отдельности. PPJoystick это как бы драйвер для виртуального джойстика, а внутри GlovePIE есть неплохой встроенный скриптовый язык, и с помощью него можно вытворять всё что вздумается /smile.gif' class='bbc_emoticon' alt=':)' /> Как минимум, очевидно, что можно сделать всё, что делал Aleg через JMouse.

Я себе сделал управление двумя мышками, это вообще круто!

Если кому интересно, выкладываю свои скрипты. Несколько штук, т.к. в «боевом» боюсь будет уже сложновато разобраться /smile.gif' class='bbc_emoticon' alt=':crazy:' />

Пробовал несколько вариантов: 1) правая мышь - руление, левая - комбинированная ось с газом/торможением по вертикали; 2) тоже самое, но газ/торможение - по горизонтали; 3) правая мышь: по горизонтали руление, по вертикали вверх ось для газа, левая мышь: по вертикали вверх ось для тормоза. Пока остановился на 3 варианте.

Скрипт первый, простой (реализован второй вариант, газ/тормоз на левой мышке по горизонтали).
PIE.FrameRate = 500 // не знаю, насколько оно вам надо. у меня просто мыши работают на 500Hz, я и прописал на всякий случай

// руление:
ppjoy.analog0 = MapRange(mouse2.DirectInputX, 0,2000, -1,1)

// газ, со сбросом при переключении вверх:
if (mouse2.RightButton) { // правая кнопка на правой мыше для переключения вверх
  ppjoy.analog1 = 0 // сброс до 50%
} else {
  ppjoy.analog1 = MapRange(mouse1.DirectInputX, 0,450, -1,1)
}

// тормоз:
ppjoy.analog2 = MapRange(mouse1.DirectInputX, -450,0, 1,-1)

// кнопочки:
ppjoy.digital1 = mouse2.LeftButton
ppjoy.digital2 = mouse2.RightButton
ppjoy.digital3 = mouse2.MiddleButton
ppjoy.digital6 = mouse1.LeftButton
ppjoy.digital7 = mouse1.RightButton
ppjoy.digital8 = mouse1.MiddleButton
Комментарии:
1. У меня правая мышь это mouse2, левая mouse1.
2. Меняя числовые значения (2000, 450, etc.), можно менять чувствительность.
3. Переключение передач нужно ставить на правую мышь, левая кнопка - передача вниз, правая кнопка - передача вверх.

У данного, простого, подхода есть одна проблема. Если, допустим, при выводе газа на максимум вы уводите мышь слишком далеко, то при последующем снятии газа мышь нужно будет вести до той самой точки, где был максимум. Что может быть довольно далеко, соответственно можно чуть проспать с точкой отпускания газа/торможения. К тому же придется постоянно поправлять мышку на столе, при далёких «уезжаниях». Поэтому я подумал, и написал более навороченный скрипт, лишенный этого недостатка /smile.gif' class='bbc_emoticon' alt=':)' />
Скрипт два.
PIE.FrameRate = 500

// инициализация своих переменных:
if (not var.initialized) {
  var.brkscale = 300 // чувствительность для тормоза
  var.thrscale = 400 // чувствительность для газа
  var.ymin = -var.brkscale
  var.ymax = var.brkscale
  var.y2min = -var.thrscale
  var.y2max = var.thrscale
  var.infostate = 3 // 0..3 = F9, F10, F12, none
  var.initialized = true
}

// руление:
ppjoy.analog0 = MapRange(mouse2.DirectInputX, 0,2000, -1,1)

// газ, со сбросом при переключении вверх:
if (mouse2.RightButton) {
  ppjoy.analog1 = 0 // сброс до 50%
} else {
  // хитромудрое вычисление границ
  if (Delta(mouse2.DirectInputY) < 0) {
	if (mouse2.DirectInputY < var.y2min) {
	  var.y2min = mouse2.DirectInputY
	  var.y2max = mouse2.DirectInputY + var.thrscale
	}
  } else if (Delta(mouse2.DirectInputY) > 0) {
	if (mouse2.DirectInputY > var.y2max) {
	  var.y2max = mouse2.DirectInputY
	  var.y2min = mouse2.DirectInputY - var.thrscale
	}
  }
  ppjoy.analog1 = MapRange(mouse2.DirectInputY, var.y2min,var.y2max, 1,-1)
}

// тормоз:
if (Delta(mouse1.DirectInputY) < 0) {
  if (mouse1.DirectInputY < var.ymin) {
	var.ymin = mouse1.DirectInputY
	var.ymax = mouse1.DirectInputY + var.brkscale
  }
} else if (Delta(mouse1.DirectInputY) > 0) {
  if (mouse1.DirectInputY > var.ymax) {
	var.ymax = mouse1.DirectInputY
	var.ymin = mouse1.DirectInputY - var.brkscale
  }
}
ppjoy.analog2 = MapRange(mouse1.DirectInputY, var.ymin,var.ymax, 1,-1)

// сцепление, пока не использую:
//ppjoy.analog3 = MapRange(mouse1.DirectInputY, 0,300, -1,1)

// в качестве бонуса.
// показывалка экранов F9/F10/F12 по колесу мыши (правой)
if (Delta(mouse2.DirectInputZ) > 0) {
  if (var.infostate == 3) {
	Press(F9)
	var.infostate = 0
  } else if (var.infostate == 0) {
	Press(F10)
	var.infostate = 1
  } else if (var.infostate == 1) {
	Press(F12)
	var.infostate = 2
  } else if (var.infostate == 2) {
	Press(F12)
	var.infostate = 3
  }
} else if (Delta(mouse2.DirectInputZ) < 0) {
  if (var.infostate == 3) {
	Press(F12)
	var.infostate = 2
  } else if (var.infostate == 2) {
	Press(F10)
	var.infostate = 1
  } else if (var.infostate == 1) {
	Press(F9)
	var.infostate = 0
  } else if (var.infostate == 0) {
	Press(F9)
	var.infostate = 3
  }
}

// кнопочки:
ppjoy.digital1 = mouse2.LeftButton
ppjoy.digital2 = mouse2.RightButton
ppjoy.digital3 = mouse2.MiddleButton
ppjoy.digital6 = mouse1.LeftButton
ppjoy.digital7 = mouse1.RightButton
ppjoy.digital8 = mouse1.MiddleButton
Комментарии:
1. Это реализация третьего варианта (газ на правой мышке, тормоз на левой).
2. Бонус скрипт. При вращении колеса правой мышки последовательно показываются экраны F9, F10, F12. Будет очень удобно во время гонки.


PS. У меня ещё очень нубский вопрос /smile.gif' class='bbc_emoticon' alt=':)' /> Зачем нужна подгазовка при переключении вниз? Я пока не понял зачем оно, и потому не реализовывал.
PS2. Если кому-то нужна ещё более подробная инструкция, со скриншотами в LFS - могу написать.

Сообщение отредактировал ivanzoid: 09 Июль 2009 - 12:56

  • 0

#41 Пробегавший мимо repeat...

Пробегавший мимо repeat...
  • ____

Отправлено 09 Июль 2009 - 13:49

глаза сломал, но не проще ли сделать проверку типа

if mouseN.DirectInputX >=2000 then
  mouseN.DirectInputX = 2000
endif
?

// инициализация своих переменных:
if (not var.initialized) {
  var.brkscale = 300 // чувствительность для тормоза
  var.thrscale = 400 // чувствительность для газа
  var.ymin = -var.brkscale
  var.ymax = var.brkscale
  var.y2min = -var.thrscale
  var.y2max = var.thrscale
  var.infostate = 3 // 0..3 = F9, F10, F12, none
  var.initialized = true
}

если версия 0.30 целесообразно использовать
if starting then 
  var.brkscale = 300 // чувствительность для тормоза
  var.thrscale = 400 // чувствительность для газа
  var.ymin = -var.brkscale
  var.ymax = var.brkscale
  var.y2min = -var.thrscale
  var.y2max = var.thrscale
  var.infostate = 3 // 0..3 = F9, F10, F12, none
endif

Сообщение отредактировал repeat: 09 Июль 2009 - 13:58

  • 0

#42 ivanzoid

ivanzoid

    Мимо проходил..

  • На квалификации
  • 9 сообщений
  • Откуда:Омск
  • Контроллер:мышь
  • LFS-статус:S2 Licensed
  • LFS account:ivanzoid

Отправлено 09 Июль 2009 - 13:59

глаза сломал, но не проще ли сделать проверку типа

if mouseN.DirectInputX >=2000 then mouseN.DirectInputX
?


repeat, если ты про MapRange, я исходил из следующего:
1) Такой вариант есть в туториале /smile.gif' class='bbc_emoticon' alt=':)' />
2) Исходил из предположения, что MapRange вероятно, может выполняться быстрее, чем аналогичная формула в скрипте, т.к. эта ф-ия из рантайма глоува (т.е. может быть написана на C), а если мы пишем формулой, то она высчитывается интерпрететором, что может быть медленнее. /smile.gif' class='bbc_emoticon' alt=':crazy:' />

А если ты про синтаксис — ну сишник я, не паскалист /smile.gif' class='bbc_emoticon' alt=':)' />
  • 0

#43 ivanzoid

ivanzoid

    Мимо проходил..

  • На квалификации
  • 9 сообщений
  • Откуда:Омск
  • Контроллер:мышь
  • LFS-статус:S2 Licensed
  • LFS account:ivanzoid

Отправлено 09 Июль 2009 - 14:44

глаза сломал, но не проще ли сделать проверку типа

if mouseN.DirectInputX >=2000 then
  mouseN.DirectInputX = 2000
endif
?


А, всё, понял, до меня дошло /smile.gif' class='bbc_emoticon' alt=':)' />
К сожалению так нельзя, для разных мышей нельзя руками выставлять directinput-координаты. Можно только mouse.DirectInputN = xxx. В принципе, если мы используем с одной мышки только X, а с другой - только Y, тогда можно так попробовать, во всех остальных конфигурациях не получится.

Сообщение отредактировал ivanzoid: 09 Июль 2009 - 14:44

  • 0

#44 Пробегавший мимо repeat...

Пробегавший мимо repeat...
  • ____

Отправлено 09 Июль 2009 - 16:57

1. поле Press(F9) нужно делать Release(F9) и далее соответсвенно

вот кстати, написал только что функцию энкодера, легко ограничиваемую в пределах.

if starting {
   var.infostate = 0
   var.ismax = 3 // максимальное значение энкодера
}

var.d = Delta(mouse.DirectInputZ)
if (var.d <> 0) {
   var.d = var.d/math.abs(var.d)
   var.infostate = var.infostate + var.d
   if (var.infostate > var.ismax) or (var.infostate < 0) {
	  var.infostate = var.infostate + (var.ismax+1) * (-var.d)
   }
}

  • 0

#45 Пробегавший мимо leopold...

Пробегавший мимо leopold...
  • ____

Отправлено 11 Июнь 2010 - 10:49

Может кто нибудь по подробнее рассказать, как заюзать две мыши (обе юсб).
Есть PPJoy и Jmouse. Например у Lion HC получилось.
Спасибо.
  • 0

#46 ivanzoid

ivanzoid

    Мимо проходил..

  • На квалификации
  • 9 сообщений
  • Откуда:Омск
  • Контроллер:мышь
  • LFS-статус:S2 Licensed
  • LFS account:ivanzoid

Отправлено 13 Июнь 2010 - 16:41

leopold, дык, бери скрипт из моего сообщения (тыц), первый или второй. Запкускаешь с ним glovepie, настраиваешь оси в lfs, и вперёд! /smile.gif' class='bbc_emoticon' alt=':)' />
  • 0

#47 Vasilich

Vasilich

    Заводской пилот

  • На квалификации
  • PipPipPipPipPip
  • 488 сообщений
  • Откуда:Чусовой
  • Контроллер:Logitech Driving Force GT
  • LFS-статус:S2 Licensed
  • LFS account:Dim.Ka

Отправлено 13 Июнь 2010 - 17:48

А можно сделать чтобы сила контроля кнопками была раздельна?

Сообщение отредактировал Vasilich: 13 Июнь 2010 - 22:46

  • 0

#48 Hell

Hell

    Рейсер со стажем

  • На квалификации
  • PipPipPip
  • 116 сообщений
  • Откуда:Питер
  • Контроллер:Logitech MOMO
  • LFS-статус:S2 Licensed
  • LFS account:vs14

Отправлено 13 Июнь 2010 - 22:24

А можно сделать чтобы усилие нажатия кнопками было раздельное?


Ты сам-то понял, что сказал?

Читаю и фигею, счетчик набиваешь?
  • 0

#49 Vasilich

Vasilich

    Заводской пилот

  • На квалификации
  • PipPipPipPipPip
  • 488 сообщений
  • Откуда:Чусовой
  • Контроллер:Logitech Driving Force GT
  • LFS-статус:S2 Licensed
  • LFS account:Dim.Ka

Отправлено 13 Июнь 2010 - 22:50

Так понятнее? Исправил пост. Расчитывал на интелектуальность форумцев (и вправду не понятно как сила раздельна/pardon.gif' class='bbc_emoticon' alt=':)' />), поэтому не стал расписывать подробно, хотелось бы в управлении ставить силу контроля кнопками отдельно на тормоз и газ
  • 0

#50 -=Ice=-

-=Ice=-

    Hardcore Simracer

  • Алиены
  • PipPipPipPipPipPipPipPipPipPipPip
  • 3 313 сообщений
  • Откуда:Москва
  • Контроллер:Logitech G25
  • LFS-статус:S2 Licensed
  • LFS account:IceDrugg

Отправлено 14 Июнь 2010 - 02:09

"Один дурак может задать столько вопросов что и 100 мудрецов не ответят" ©
  • 0
Изображение Рысечка @ Drive2
POWER is nothing without CONTROL
If everything seems under control, you're just not going fast enough
С нубами катать - скилл про***ть © by me
Держака как денег - много не бывает © by me
Смоленск — 1:46.905; NRing — 1:50.638; Мячково — 1:55.916; Moscow Raceway (GP2) — 2:19.100

#51 Пробегавший мимо leopold...

Пробегавший мимо leopold...
  • ____

Отправлено 14 Июнь 2010 - 03:39

ivanzoid Спасиб большой, заработало! будем привыкать, тока PPJoy Virt joy поставить пришлось, я об том и говорю, что в ветке инфы много и целостной картины нет.
Еще раз большой человеческий спасиб. Ну еще мышки под номерами идут 1 и 3 8-)
  • 0

#52 ivanzoid

ivanzoid

    Мимо проходил..

  • На квалификации
  • 9 сообщений
  • Откуда:Омск
  • Контроллер:мышь
  • LFS-статус:S2 Licensed
  • LFS account:ivanzoid

Отправлено 16 Июнь 2010 - 22:34

А можно сделать чтобы сила контроля кнопками была раздельна?


Средствами LFS думаю, что нет. Через GlovePIE в принципе можно, только муторно это будет кодировать и не факт что будет работать достаточно плавно /wink.gif' class='bbc_emoticon' alt=':)' />.
В общем glovepie выполняет наш скрипт с частотой "PIE.FrameRate" раз в секунду, нужно будет сделать что-то типа - сохраняем что такая-то кнопка у нас "отжимается", дальше каждый кадр снимает с оси нужное значение... как дойдёт до нуля, сбрасываем флаг, что кнопка "отжимается"... ну и т.д. в таком ключе для нужных кнопок /smile.gif' class='bbc_emoticon' alt=':)' /> при желании можно даже всякие нелинейности замутить, там синусы/косинусы/etc /smile.gif' class='bbc_emoticon' alt=':)' />
  • 0




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых


Тематические ресурсы-партнеры: