1 (изменено: al-biruni, 2018-05-20 22:14:51)

Тема: AHK: Настройка автозамены на геймпаде для джойстика

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

00

  автозамена срабатывает на

airline

, но при вводе с геймпада автозамена не работает. Нужна помощь, подскажите где копать, или может какой то другой подход к данной задаче кто то предложит?

#Persistent  ; Keep this script running until the user explicitly exits it.
SetTimer, WatchAxis, 5
return

WatchAxis:
GetKeyState, JoyU, JoyU  ; Get position of X axis.
GetKeyState, JoyR, JoyR  ; Get position of Y axis.
KeyToHoldDownPrev = %KeyToHoldDown%  ; Prev now holds the key that was down before (if any).

if JoyU > 80
    KeyToHoldDown = 0
else if JoyU < 20
    KeyToHoldDown = Numpad1
else if JoyR > 80
    KeyToHoldDown = VK32
else if JoyR < 20
    KeyToHoldDown = VK33
else
    KeyToHoldDown =

if KeyToHoldDown = %KeyToHoldDownPrev%  ; The correct key is already down (or no key is needed).
    return  ; Do nothing.

; Otherwise, release the previous key and press down the new key:

;SetKeyDelay -1  ; Avoid delays between keystrokes.
;if KeyToHoldDownPrev   ; There is a previous key to release.
;    SendInput, {%KeyToHoldDownPrev% up}  ; Release it.
;if KeyToHoldDown   ; There is a key to press down.
;    SendInput, {%KeyToHoldDown% down}  ;
SendInput %KeyToHoldDown%

return

:b*?:00::airline

2

Re: AHK: Настройка автозамены на геймпаде для джойстика

SendLevel, 1
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3 (изменено: al-biruni, 2018-05-22 21:02:19)

Re: AHK: Настройка автозамены на геймпаде для джойстика

serzh82saratov

Спасибо, так работает!

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

4

Re: AHK: Настройка автозамены на геймпаде для джойстика

al-biruni пишет:

двойного отклонения

Это - отклонение в сторону - возврат в центр, не "задевая" в другую сторону - отклонение в ту же сторону в диапазоне задержки?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: Настройка автозамены на геймпаде для джойстика

serzh82saratov
Да хоть так, допустим отклонение в ту же сторону.

6

Re: AHK: Настройка автозамены на геймпаде для джойстика

al-biruni пишет:

хоть так

А как в идеале?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 (изменено: al-biruni, 2018-05-22 22:57:09)

Re: AHK: Настройка автозамены на геймпаде для джойстика

serzh82saratov
В идеале хочу сделать так чтобы на двойное отклонение джойстика  в любую сторону можно было бы назначить какую либо клавишу с клавиатуры. Например при отклонении:

"влево"+"вправо" = {ENTER},  
"вправо"+"влево"={ESC} 
"влево"+"влево" = {BACKSPASE}

Но сейчас уперся в проблему что никак не могу понять как работать с таймером

8 (изменено: serzh82saratov, 2018-05-23 18:36:03)

Re: AHK: Настройка автозамены на геймпаде для джойстика

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

#Persistent  
SetTimer, DoubleAxis, 5
return

MyFunc(key) {
	Static Arr := {"LR":"{ENTER}","RL":"{ESC}","LL":"{BACKSPASE}"}
	ToolTip % key "`n" Arr[key]
	; SendInput % Arr[key]
}
DoubleAxis() {
	Static Tick := 0, Prev, Birth, Dev := 30  ; отклонение от центра, от 0 до 50.
	, min := 50 - Dev, max := 50 + Dev, Delay := 500  ;	задержка между отклонениями  
	X := GetKeyState("JoyU"), Y := GetKeyState("JoyR")
	Key := X > max ? "R" : X < min ? "L" : Y > max ? "D" : Y < min ? "U" : 0
	if Birth
		return !Key && (Birth := 0)
	if !Prev
		return Key && (Tick := A_TickCount, Prev := Key, Birth := 1) 
	if (A_TickCount - Delay > Tick)
		return (Prev := Birth := 0)
	if Key 
		MyFunc(Prev Key), Prev := Tick := 0, Birth := 1
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Настройка автозамены на геймпаде для джойстика

serzh82saratov
Крайне благодарен за помощь! То что надо!

10

Re: AHK: Настройка автозамены на геймпаде для джойстика

Мне надо кое что потестить, у вас один джойстик?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Настройка автозамены на геймпаде для джойстика

serzh82saratov
один геймпад с двумя джойстиками

12

Re: AHK: Настройка автозамены на геймпаде для джойстика

Да, я геймпад имел ввиду, ок, но мне надо больше.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui