我有一个lua脚本,它可以将英文布局重写成西里尔文布局,但是,当我在游戏中使用它时,每次按下绑定键都会造成微滞后。
lmc_assign_keyboard('MACROS');
lmc_set_handler('MACROS',function(button, direction)
if (direction == 0) then return end
if (button == string.byte('Q')) then lmc_send_input(0, 1081, 4)
elseif (button == string.byte('A')) then lmc_send_input(0, 1092, 4)
elseif (button == string.byte('W')) then lmc_send_input(0, 1094, 4)
elseif (button == string.byte('S')) then lmc_send_input(0, 1099, 4)
elseif (button == string.byte('E')) then lmc_send_input(0, 1091, 4)
elseif (button == string.byte('D')) then lmc_send_input(0, 1074, 4)
elseif (button == string.byte('R')) then lmc_send_input(0, 1082, 4)
elseif (button == string.byte('F')) then lmc_send_input(0, 1072, 4)
elseif (button == string.byte('T')) then lmc_send_input(0, 1077, 4)
elseif (button == string.byte('G')) then lmc_send_input(0, 1087, 4)
elseif (button == string.byte('Y')) then lmc_send_input(0, 1085, 4)
elseif (button == string.byte('H')) then lmc_send_input(0, 1088, 4)
elseif (button == string.byte('U')) then lmc_send_input(0, 1075, 4)
elseif (button == string.byte('J')) then lmc_send_input(0, 1086, 4)
elseif (button == string.byte('I')) then lmc_send_input(0, 1096, 4)
elseif (button == string.byte('K')) then lmc_send_input(0, 1083, 4)
elseif (button == string.byte('O')) then lmc_send_input(0, 1097, 4)
elseif (button == string.byte('L')) then lmc_send_input(0, 1076, 4)
elseif (button == string.byte('P')) then lmc_send_input(0, 1079, 4)
elseif (button == string.byte(';')) then lmc_send_input(0, 1078, 4)
elseif (button == string.byte("'")) then lmc_send_input(0, 1101, 4)
end
end)
有什么方法可以改善这个脚本的不良性能吗?
有很多调用 string.byte
,基本上是常数。所以要把这个因素考虑进去。也可以用一个表来代替一连串的if。请看这段代码。
local T={
[string.byte('Q')]=1081,
[string.byte('A')]=1092,
[string.byte('W')]=1094,
[string.byte('S')]=1099,
[string.byte('E')]=1091,
[string.byte('D')]=1074,
[string.byte('R')]=1082,
[string.byte('F')]=1072,
[string.byte('T')]=1077,
[string.byte('G')]=1087,
[string.byte('Y')]=1085,
[string.byte('H')]=1088,
[string.byte('U')]=1075,
[string.byte('J')]=1086,
[string.byte('I')]=1096,
[string.byte('K')]=1083,
[string.byte('O')]=1097,
[string.byte('L')]=1076,
[string.byte('P')]=1079,
[string.byte(';')]=1078,
[string.byte("'")]=1101,
}
lmc_assign_keyboard('MACROS');
lmc_set_handler('MACROS',function(button, direction)
if (direction == 0) then return end
if T[button] then lmc_send_input(0,T[button],4) end
end)