在按住并按住某个键的同时按下/阻止一个键

时间:2017-05-23 17:34:49

标签: autohotkey game-development

所以在这个游戏中我用 WASD 键移动我的charachter,但是如果我同时按住 A D 键时间, 游戏注册为向前移动( W | )所以charachter开始向前移动而不是strafe动作(左)\(右) /

所以我需要一个能够同时阻止 A D 键的代码。

CHECK THIS GIF, SO U CAN SEE WHAT I MEAN!

我希望 A D 互相覆盖(我没有使用 W 键),因为如果我同时击中 A D 同时我的角色向前移动,而不是像 \ / 我想避免前进的动作。

我想彻底改变快速左\和右 / 只扫描。

以下是我到目前为止的代码:

~a::
If (GetKeyState("d", "p"))
{
    Send {d up}
    d = 0
}
Return

~d::
If (GetKeyState("a", "p"))
{
    Send {a up}
    a = 0
}
Return

a up::
If (d)
{
    Send {d down}
    d = 0
}
Return

d up::
If (a)
{
    Send {a down}
    a = 0
}
Return

基本上这个代码几乎可以正常工作。

问题是如果我不改变数字我不能连续改变方向我需要放开键。它在1个方向改变后停止。如果我更改其工作的数字,但在几个方向改变后,它向左或向右切换。即使我让它向左或向右移动......

有什么想法吗? THX

2 个答案:

答案 0 :(得分:2)

这应该有效。试试吧,让我知道。

$*a::
$*d::
    SendInput, {a Up}{d Up}
    StringReplace, hk, A_ThisHotkey, % "$*"
    SendInput, {%hk% Down}
    KeyWait, % hk
    Send, {a Up}{d Up}
return

答案 1 :(得分:0)

编辑:您可以使用下面的代码。也许它会帮助你

#SingleInstance, force
#Persistent
#NoEnv
#MaxThreadsPerHotkey, 1

~a & d::
~d & a::
Send, {a up}
key := "d"
SetTimer, pressdown, 10
return

~d::key := "d"
~a::key := "a"
~a up::key := "d"
~d up::key := "a"

pressdown:
if GetKeyState(key, "p")
{
    SendInput, {%key% down}
    SetTimer, pressdown, 30
}
else {
    SetTimer, pressdown, Off
    SendInput, {%key% up}
}
return

此脚本不允许同时按下A或D.