【问题标题】:Disable/Block a Key with another Key while its pressed and held down按下并按住另一个键时禁用/阻止一个键
【发布时间】:2017-10-23 19:14:33
【问题描述】:

所以在这个游戏中我用 WASD 键移动我的角色,但是如果我同时按住 AD 键时间, 游戏将其注册为向前移动(W|),因此角色开始向前移动而不是扫射动作(左)\(右)/

所以我需要一个代码来防止 AD 键同时按下。

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

我希望 AD 相互覆盖(我没有使用 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 个方向改变后停止。如果我改变数字它的工作,但在几个方向改变后,它会向左或向右切换。即使我让它去左或右移动....

有什么想法吗?谢谢

【问题讨论】:

    标签: autohotkey game-development


    【解决方案1】:

    这应该可行。试试看,让我知道。

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

    【讨论】:

    • 嘿,GroggyOtter 抱歉回复晚了。脚本正在工作,但只有一次。它是我正在玩的游戏。如果我按住 a 键并开始按住 d 键以及脚本正在工作,因为它应该释放 a 键。但是在我放开d键后,我必须再次按下a键。我通常总是按住两个键之一。现在我必须释放它们,这是一个问题。你知道任何解决方法吗?谢谢
    【解决方案2】:

    编辑:您可以使用下面的代码。或许能帮到你

    #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。

    【讨论】:

    • 代码看起来又好又简单,但它不起作用。你可以在文本编辑器中测试。检查我为代码提供的 gif。我发现的脚本比 urs 工作得更好,我不知道为什么,但它是 :D 有什么想法吗?谢谢你
    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 2021-02-02
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多