我目前有一个问题,我设置了一个键来启动一个过程,然后按下另一个键来上下移动,但是如果我释放第一个键,然后再次点击它,滚动的数量就会成倍增加(我想)。例如,我按“G”键,然后按“U”键向上,按“J”键向下。当我第一次按住“G”时,它工作得无懈可击。但是,如果我松开“G”键,然后再次按下它来滚动更多内容,当我按一次“U”键时,它会输入两次。如果我松开并再次按“G”滚动,它显示我按了“U”或“J”3次。我是不是遗漏了一些非常简单的东西?以下是示例代码。
userInput.InputBegan:Connect(function(input, gameProcessed)
if not gameProcessed then
print("Not game processed!")
if input.KeyCode == Enum.KeyCode.G then
print("G is Held")
userInput.InputBegan:Connect(function(input2, gP)
local db = false
if not gP then
print("Also not game processed!")
if input2.KeyCode == Enum.KeyCode.U and input.KeyCode == Enum.KeyCode.G then
print("U was pressed!")
if not db then
db = true
print("db: "..tostring(db))
if Multi + 1 > 20 then
Multi = 20
else
Multi = Multi + 1
print("Multi: "..Multi)
end
print("Multi: "..Multi)
wait(0.5)
db = false
print("db: "..tostring(db))
end
elseif input2.KeyCode == Enum.KeyCode.J and input.KeyCode == Enum.KeyCode.G then
print("J was pressed!")
if Multi - 1 < 2 then
Multi = 2
else
Multi = Multi - 1
print("Multi: "..Multi)
end
print("Multi: "..Multi)
end
end
end)
end
end
end)
编辑:
我让它强制停止我的keyPressed事件,但我仍然有增加滴答的问题,正如你所说的,这是由于多个keyPressed事件开始。我有一个将keysPressed设置为nil的inputEnded函数。下面是我更新的代码:
local function onInputBegan(input, gameProcessed)
if gameProcessed then
return
end
pressedKeys[input.KeyCode] = true
if pressedKeys[Enum.KeyCode.G] then
gDown = true
if not debounce then
debounce = true
if hasPower.Value then
if powerEquipped.Value == "PowerUp" then
while gDown do
print("LOOP!")
if isPowered.Value == true then
gDown = false
isPowered.Value = false
multi.Value = multi.Value / Multi
print("Exited Power!")
print("G reset!")
break
elseif powerStamCost.Value <= stam.Value and stam.Value > powerStamDrain.Value and not isPowered.Value then
baseChargeTicks = ((((Multi - 2) * (1 / 6)) + 2) * 4)
if chargeTicks >= baseChargeTicks then
gDown = false
print("In Power")
chargeTicks = 0
stam.Value = stam.Value - powerStamCost.Value
multi.Value = multi.Value * Multi
isPowered.Value = true
wait(staminaRate)
chargeTicks = 0
print("G Reset!")
break
else
chargeTicks = chargeTicks + 1
wait(increment)
print("charge: "..chargeTicks.."/"..baseChargeTicks)
end
end
end
end
end
end
debounce = false
end
if pressedKeys[Enum.KeyCode.U] then
if hasPower.Value then
if powerEquipped.Value == "PowerUp" then
if Multi + 1 > 20 then
Multi = 20
else
Multi = Multi + 1
print("Multi: "..Multi)
end
chargeTicks = 0
end
end
elseif pressedKeys[Enum.KeyCode.J] then
if hasPower.Value then
if powerEquipped.Value == "PowerUp" then
if Multi - 1 < 2 then
Multi = 2
else
Multi = Multi - 1
print("Multi: "..Multi)
end
chargeTicks = 0
end
end
end
end
以下是尝试使用密钥时的打印输出:
15:30:02.097循环!-客户端-通电:46
15:30:02.348收费: 1/8 -客户端-电源:78
15:30:02.348循环!-客户端-通电:46
15:30:02.363多:3客户端-通电:109
15:30:02.513循环!-客户端-通电:46
15:30:02.613收费: 0/8.6666666666667 -客户端-电源:78
15:30:02.614循环!-客户端-通电:46
15:30:02.646多:4客户端-通电:109
15:30:02.764收费: 0/8.6666666666667 -客户端-电源:78
15:30:02.764▶循环!(x2) -客户端-通电:46
15:30:02.864收费: 0/9.3333333333333 -客户端-电源:78
15:30:02.864循环!-客户端-通电:46
15:30:02.947多:5客户端-通电:109
15:30:03.017收费: 0/9.3333333333333 -客户端-电源:78
15:30:03.017循环!-客户端-通电:46
15:30:03.031收费: 1/10 -客户端-电源:78
15:30:03.031▶循环!(x2) -客户端-通电:46
15:30:03.130收费: 3/10 -客户端-电源:78
15:30:03.130循环!-客户端-通电:46
15:30:03.214多:6客户端-通电:109
15:30:03.280收费: 0/10 -客户端-电源:78
15:30:03.280循环!-客户端-通电:46
15:30:03.297收费: 1/10.666666666667 -客户端-电源:78
15:30:03.297循环!-客户端-通电:46
15:30:03.331收费: 2/10.666666666667 -客户端-电源:78
15:30:03.331▶循环!(x2) -客户端-通电:46
15:30:03.397收费: 4/10.666666666667 -客户端-电源:78
15:30:03.397循环!-客户端-通电:46
15:30:03.479多:7-客户端-通电:109
15:30:03.547收费: 0/10.666666666667 -客户端-电源:78
15:30:03.548循环!-客户端-通电:46
15:30:03.548收费: 1/11.333333333333 -客户端-电源:78
15:30:03.548循环!-客户端-通电:46
15:30:03.598收费: 2/11.333333333333 -客户端-电源:78
15:30:03.598循环!-客户端-通电:46
15:30:03.614收费: 3/11.333333333333 -客户端-电源:78
15:30:03.614循环!-客户端-通电:46
15:30:03.664收费: 4/11.333333333333 -客户端-电源:78
15:30:03.664循环!-客户端-通电:46
15:30:03.814收费: 5/11.333333333333 -客户端-电源:78
15:30:03.814循环!-客户端-通电:46
15:30:03.814收费: 6/11.333333333333 -客户端-电源:78
15:30:03.814循环!-客户端-通电:46
15:30:03.863收费: 7/11.333333333333 -客户端-电源:78
15:30:03.864循环!-客户端-通电:46
15:30:03.881收费: 8/11.333333333333 -客户端-电源:78
15:30:03.881循环!-客户端-通电:46
15:30:03.914收费: 9/11.333333333333 -客户端-电源:78
15:30:03.915循环!-客户端-通电:46
15:30:04.064收费: 10/11.333333333333 -客户端-电源:78
15:30:04.064循环!-客户端-通电:46
15:30:04.064收费: 11/11.333333333333 -客户端-电源:78
15:30:04.064循环!-客户端-通电:46
15:30:04.114收费: 12/11.333333333333 -客户端-电源:78
15:30:04.114循环!-客户端-通电:46
PowerUp中的15:30:04.114 -客户端-通电:64
15:30:04.114通过Multi!- Client - PowerDisplayScript:84重新计算奖金
15:30:04.114通过奖励重新计算功率!-客户端- PowerDisplayScript:98
15:30:04.130健康排泄!!- Client - HealthBarScript:40
15:30:04.147▶费用: 0/11.333333333333 (x4) -客户端-电源:78
15:30:05.130 G重置!-客户端-通电:71
15:30:05.163▶健康排泄!!(x5) -客户端-健康栏脚本:40
15:30:09.948循环!-客户端-通电:46
15:30:09.948通过Multi!- Client - PowerDisplayScript:84重新计算奖金
15:30:09.949通过奖励重新计算功率!-客户端- PowerDisplayScript:98
15:30:09.949退出PowerUp!-客户端-通电:53
15:30:09.949 G重置!-客户端-通电:54
发布于 2021-05-11 15:52:15
这实际上很简单。
每次按G键时,都会将另一个事件侦听器连接到InputBegan事件。
因此,在按G3次之后,您将有3个相同的事件侦听器,它们响应J或D,导致观察到的三重输入。它们将按照连接的顺序被调用。
如果不再需要事件处理程序,则将其断开。这可以使用InputEnded事件来完成。如果G被释放,则断开处理U和J的监听程序。
或者,为了添加一个新的监听器,您也可以使用一个变量来存储G正在被按下的信息。
简单的、未经测试的示例:
local pressedKeys = {}
local function = OnInputBegan(input)
pressedKeys[input.KeyCode] = true
if pressedKeys[Enum.KeyCode.G] and pressedKeys[Enum.KeyCode.U] then
print("G and U are down!")
end
end
local function OnInputEnded(input)
pressedKeys[input.KeyCode] = nil
end
local userInput = game:GetService("UserInputService")
userInput.InputBegan:Connect(OnInputBegan)
userInput.InputEnded:Connect(OnInputEnded)
https://stackoverflow.com/questions/67479741
复制相似问题