實現按鍵插件的核心原理
通過一個table類型的QMPlugin變量實現按鍵精靈調用Lua函數,例如
-- Lua代碼
-- 實現兩數相加求和
function QMPlugin.Add(a, b)
return a + b
end
將以上代碼保存成.lua文件,例如test.lua后,放入按鍵精靈手機助手的plugin文件夾內。
再重啟按鍵精靈手機助手或者刷新插件列表,即可看到自己寫的test插件了。
在按鍵精靈中調用代碼如下
//按鍵精靈代碼
Import "test.lua" //導入插件Dim 結果 = test.Add(11, 22)
TracePrint 結果 //輸出結果為33
if判斷結構
Lua中的if也是判斷條件的作用,與按鍵精靈非常類似,但再次強調,Lua是區分大小寫的,所有自帶命令關鍵字都是小寫,千萬別手賤把if寫成If。另外,if的語法結構也稍有不同,詳見下面例子
local a = 1
if a > 0 then --判斷a是否大于0, 注意不要隨便大寫!
print("a大于0")
end-- 帶else的if結構
if a < 0 then --判斷a是否小于0, 注意不要隨便大寫!
print("a小于0")
else
print("a不小于0")
endlocal b = 1
local c = 1
-- 帶elseif的if結構, 與語法與按鍵類似, 也支持加else
if c == 0 then -- 相等符號與按鍵不一致, 這里是==, 注意別寫錯
print("c等于0")
elseif b ~= 0 then -- 不相等符號與按鍵不一致, 這里是~=, 注意別寫錯
print("c不等于0")
elseif a < 0 then -- 小于號<與按鍵語法一致
print("a小于0")
elseif a > 0 then -- 大于號>與按鍵語法一致
print("a大于0")
elseif b <= 0 then -- 小于或等于號<=與按鍵語法一致
print("b小于或等于0")
elseif b >= 0 then -- 大于或等于號>=與按鍵語法一致
print("b大于或等于0")
end-- and or not 運算符與按鍵精靈一致, 但是注意必須是小寫
-- 除了false與nil是假外, 其他全部都是真
if (a == 1 and b == 1) or c ~= 1 then
print("條件成立")
end
while循環結構
while循環與按鍵語法類似,都是當條件為真時進入循環,具體語法格式例子如下:?
local i = 1
while i < 10 do --當i小于10為真時, 進入循環
print(i)
i = i + 1
end
print(i)
-- 當i不小于等于10時, 跳出這個循環
?repeat循環結構
repeat循環類似于按鍵語法中的do...loop until循環,當條件為真時結束循環,參考例子如下:
local i = 10
repeat -- 判斷在后面, 所以這里必定會進入循環一次
i = i - 1
until i == 0 -- 當i的值為0時, 將會停止循環
for循環結構
for循環結構與按鍵語法中的for循環有點類似,但是格式有所不同,參考下面例子:?
-- 數值型for循環遞增
for i = 1, 10 do -- 循環變量i的值從1到10, 每次遞增1
print(i)
end-- 數值型for循環遞減
for i = 10, 1, -1 do -- 循環變量i的值從10到1, 每次遞減-1
print(i)
end-- 循環變量i無需用local定義, 作用域僅在for循環中, 離開則失效
-- 請勿在循環中修改循環變量的值, 否則可能會產生不可預知的結果-- 泛型for循環
local t = {"QQ"=345911220, "姓名"="紫貓老師"} --定義并賦值一個table變量
for k, v in pairs(t) do -- 遍歷表 t 中的所有鍵值對, pairs是一個迭代函數
print(k .. "=" .. v) -- 字符串之間使用兩個小數點 .. 連接起來, 類似于按鍵精靈中的&連接符
end
?控制循環命令
Lua提供了break,goto來控制代碼的執行走向。
break是用來跳出當前循環結構,不支持在循環外使用break,類似于按鍵精靈中的exit do,exit for。
goto命令與按鍵的goto類似,可以在同個作用域內跳轉,使用兩個冒號做標簽名稱。具體例子如下:
-- break例子
for i = 1, 10 do
if i == 5 then
break -- 當i等于5時, 跳出當前for循環, 等同于按鍵的exit for
end
end-- 定義一個標簽名稱為start
::start::
-- 執行一些代碼
goto start -- 跳轉到start的位置繼續向下執行
?
?
?