Scripting 同时按下两个键时的优先级-游戏脚本

Scripting 同时按下两个键时的优先级-游戏脚本,scripting,autohotkey,game-development,Scripting,Autohotkey,Game Development,基本上,我希望这样,当我同时按下两个键(特别是A键和D键)时,最后按下的键应该具有优先级,之前的键应该被“抑制”(无输入) 例如:在游戏中,当你按a键时,角色向左移动,当你按D键时,角色向右移动。 同时按下这两个键可使角色停止。 现在的问题是,我不希望角色停止,我希望他继续移动,基于我按下的最后一个键,即使我同时按住两个键 我认为这将是一项微不足道的任务,但在尝试学习如何实现这一点后,我实际上有点不知所措(我是一个noob,抱歉:C),所以我来这里寻求一些帮助,了解如何在AHK或任何直接更改键输

基本上,我希望这样,当我同时按下两个键(特别是A键和D键)时,最后按下的键应该具有优先级,之前的键应该被“抑制”(无输入)

例如:在游戏中,当你按a键时,角色向左移动,当你按D键时,角色向右移动。 同时按下这两个键可使角色停止。 现在的问题是,我不希望角色停止,我希望他继续移动,基于我按下的最后一个键,即使我同时按住两个键


我认为这将是一项微不足道的任务,但在尝试学习如何实现这一点后,我实际上有点不知所措(我是一个noob,抱歉:C),所以我来这里寻求一些帮助,了解如何在AHK或任何直接更改键输入的易编译脚本语言上实现这一点。我并没有试图修改或创建一个游戏,所以一个重新映射这些键的脚本就足够了

自动热键示例,在“A和D,特别是”问题之后:

for k,v in StrSplit("ad")
    Hotkey, % "~$" v,Silveirous

Silveirous:
t:=SubStr(A_PriorHotkey,3)
if GetKeyState(t) and (A_ThisHotkey!=A_PriorHotkey)
    Send {%t% up}
return
文件:

嗯,嗯


编辑:

另一个解决方案,按照OP的编辑/评论中的解释进行工作:

#If GetKeyState("d","p")
~a::Send {d up}
~a up::Send {d down}
#If GetKeyState("a","p")
~d::Send {a up}
~d up::Send {a down}
#If

请务必注意和用例之间的差异。

我已经太迟了,但这可能会对将来的人有所帮助:) 基本上,您需要一个变量来跟踪角色首先面对的方向,并根据该方向进行操作。代码示例可以是:

让currentDir=0;
设maxSpeed=(deltaTime*someConstant);
if(IsKeyDown(右键)和&IsKeyDown(左键))
{
如果(currentDir==1)
速度x=-maxSpeed;
else if(currentDir==-1)
速度。x=最大速度;
}
否则如果(IsKeyDown(左键))
{
currentDir=-1;
速度x=-maxSpeed;
}
否则如果(IsKeyDown(右键))
{
currentDir=1;
速度。x=最大速度;
}
其他的
{
速度x=0.0f;
currentDir=0;
}
//最后,每一帧球员的位置都会改变
player.x+=速度.x;

然后,当您按左键同时按右键时,角色将向左移动而不停止,反之亦然:)

Bob,非常感谢您的回答!我尝试了这个脚本,它成功了,但我相信我没有像我应该描述的那样描述这个问题。当我把两个键按在一起时,它做了我想做的事情,但是像A和D一样按在一起,然后松开D再按A等等的顺序都不起作用,只是第一次按组合键,第一次按A,然后按D。你知道如何克服吗?还有,此文档是由网站自动生成的,还是您链接了所有这些内容P不管怎样,非常感谢!我会尽力理解代码,但可能需要一段时间。这是一个经过充分研究的答案。干得好