函数:getColorRGB 获取屏幕某点颜色值
函数名称:获取颜色 RGB、取色
函数功能:获取某一点的颜色 RGB 值并返回
函数方法
color_r, color_g, color_b = getColorRGB(x,y);
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
x | number | 是 | 将获取颜色值的屏幕横坐标 |
y | number | 是 | 将获取颜色值的屏幕纵坐标 |
返回值 | 类型 | 说明 |
---|---|---|
color_r, color_g, color_b | number | 该点颜色的 R,G,B 值 |
函数用例
---方法一
r,g,b = getColorRGB(100,100);
--转换成十六进制颜色值
dialog(string.format("%#x",r)..string.format("%x",g)..string.format("%x",b))
---方法二,方法一返回错误时请使用此方法
r,g,b = getColorRGB(100,100);
--转换成十六进制颜色值
hexString=string.format("%02X%02x%02x",r,g,b)
dialog(hexString)
如果某点的颜色与某颜色相似则点击
r,g,b = getColorRGB(100,100); --获取(100, 100)的颜色值,赋值给 color 变量
if r > 200 and g < 150 then --如果红色强度大于 200,绿色强度小于 150
touchDown(100,100); --那么点击该点
mSleep(30);
touchUp(100,100);
end
封装一个单点模糊比色函数
function isColor(x,y,c,s) --封装函数,函数名 isColor
local fl,abs = math.floor,math.abs
s = fl(0xff*(100-s)*0.01)
local r,g,b = fl(c/0x10000),fl(c%0x10000/0x100),fl(c%0x100)
local rr,gg,bb = getColorRGB(x,y)
if abs(r-rr)<s and abs(g-gg)<s and abs(b-bb)<s then
return true
end
end
--下面为函数用法
if isColor(963, 961, 0x7b593f,90) then --90 为模糊值,值越大要求的精确度越高
touchDown(963, 961)
mSleep(50)
touchUp(963, 961)
end
多点模糊比色
在实际游戏脚本制作中,很多界面单靠 1 个点不容易进行准确的判断,这里封装一个配合 TABLE 使用的多点模糊比色函数来实现精确判断:
function multiColor(array,s)
s = math.floor(0xff*(100-s)*0.01)
keepScreen(true)
for var = 1, #array do
local lr,lg,lb = getColorRGB(array[var][1],array[var][2])
local r = math.floor(array[var][3]/0x10000)
local g = math.floor(array[var][3]%0x10000/0x100)
local b = math.floor(array[var][3]%0x100)
if math.abs(lr-r) > s or math.abs(lg-g) > s or math.abs(lb-b) > s then
keepScreen(false)
return false
end
end
keepScreen(false)
return true
end
--用法
g_t_Table = {
{ 1962, 52, 0xefdccf},
{ 2150, 50, 0xefd8d0},
{ 1964, 76, 0xe9d1c5},
{ 2152, 74, 0xefdcd1},
{ 2122, 62, 0xf1ddd1},
{ 2146, 1080, 0x893824},
{ 1840, 1082, 0x593724},
}
if multiColor(g_t_Table,90) then
touchDown(100,100)
mSleep(50)
touchUp(100,100)
end
名词解析
R,G,B 值,即代表红(Red)、绿(Green)、蓝(Blue)三个通道的颜色强度。
整型,指的是可以用十、十六、八进制指定的数据类型。使用十六进制符号,必须加上 0x。
赋值是 Lua 基本语法,操作符为 "="(一个等号)。
等于是 Lua 基本语法,属于条件控制,操作符为 "=="(两个等号)。新手常常将等于写作赋值,从而导致编译出现错误。
注意事项
getColor 与 getColorRGB 的作用是一样的,只不过前者返回单变量,后者返回 R,G,B 三个变量。
如直接使用例子中的代码进行测试,请在全部代码之前,加入 2 ~ 3 秒延迟,或者使用循环语句。 因为脚本开始运行时,可能会出现弹窗窗口提示遮盖在前台,影响获取颜色。
特别注意,getColor 函数获得的颜色值十六进制文本中,实际顺序为 R G B。
参考资料 如何获取屏幕上某点的颜色
在你想在设备上截图,iOS 同时按下
电源键
和Home 键
,安卓为电源键
和音量键-
即可进行截图(此时屏幕会闪一下)。推荐使用触动精灵编辑器,可方便的获取所需坐标点的颜色信息。
雷电 9 系统模拟器分辨率为平板版时使用函数:getScreenSize 获取的屏幕宽高相反,获取到的宽度实际为屏幕高度,获取的高度实际为屏幕宽度,其他模拟器获取的屏幕宽高为实际屏幕宽高。